我有一个c ++项目,其目录结构如下所示:
server/
code/
BASE/
Thread/
Log/
Memory/
Net/
cmake/
CMakeList.txt
BASE/
CMakeList.txt
Net/
CMakeList.txt
这是/cmake/CMakeList.txt的一部分:
MACRO(SUBDIRLIST result curdir)
FILE(GLOB children RELATIVE ${curdir} ${curdir}/*)
SET(dirlist "")
FOREACH(child ${children})
IF(IS_DIRECTORY ${curdir}/${child})
SET(dirlist ${dirlist} ${child})
ENDIF()
ENDFOREACH()
SET(${result} ${dirlist})
ENDMACRO()
add_subdirectory(Base)
然后在/cmake/Base/CMakeList.txt中使用宏:
SET(SUBDIR, "")
SUBDIRLIST(SUBDIRS, ${BASE_SRC_DIR})
message("SUBDIRS : " ${SUBDIRS})
输出: SUBDIRS:
我通过在宏中输出它的值检查$ {dirlist},我得到预期的目录列表,但是当在SET($ {result} $ {dirlist})之后的消息(“结果”$ {result})时,我不能得到预期的输出,我的CMakeLists.txt出了什么问题?
答案 0 :(得分:2)
这里有一些小问题:
SET(dirlist "")
可能只是SET(dirlist)
。同样地,SET(SUBDIR, "")
可能只是SET(SUBDIRS)
(我猜“SUBDIR”是一个拼写错误,应该是“SUBDIRS”。你也不想在set
命令中使用逗号 - 可能是另一个错字?)${result}
的内容,请使用message("result: ${${result}}")
,因为您每次都不会将${child}
附加到result
,而是${result}
}。在您的示例中,${result}
为SUBDIRS
,因此${${result}}
为${SUBDIRS}
。SUBDIRLIST
时,请勿在参数之间使用逗号。SUBDIRS
的值时,请在引号中包含${SUBDIRS}
,即message("SUBDIRS: ${SUBDIRS}")
,否则您将丢失分号分隔符。除此之外,你的宏看起来很好。