我通常也更喜欢具有自己的局部变量范围的函数,但在您的情况下,我建议您编写自己的宏命令。
因此,采用 Fraser 的代码如下所示:
macro( set_subdir_sources )
foreach( SOURCE_FILE ${ARGN} )
set( SUBDIR_SOURCES ${SUBDIR_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/${SOURCE_FILE} )
endforeach()
set( SUBDIR_SOURCES ${SUBDIR_SOURCES} PARENT_SCOPE )
endmacro()
或使用相对路径:
macro( set_subdir_sources )
get_directory_property( _PARENTDIR PARENT_DIRECTORY )
file( RELATIVE_PATH _SUBDIR ${_PARENTDIR} ${CMAKE_CURRENT_SOURCE_DIR} )
foreach( SOURCE_FILE ${ARGN} )
set( SUBDIR_SOURCES ${SUBDIR_SOURCES} ${_SUBDIR}/${SOURCE_FILE} )
endforeach()
set( SUBDIR_SOURCES ${SUBDIR_SOURCES} PARENT_SCOPE )
endmacro()
只需致电:
set_subdir_sources( a.cpp b.cpp c.cpp )
无论如何,您的父母CMakeLists.txt
都必须知道该SUBDIR_SOURCES
变量。这还有一个优点,您可以在子目录的CMakeLists.txt
.
但是你真的需要一个CMakeLists.txt
一开始就没有定义自己的目标的子目录吗?我只是将源添加到您的父目录CMakeLists.txt
:
set(
SUBDIR_SOURCES
SubDir/a.cpp
SubDir/b.cpp
SubDir/c.cpp
)
另请参阅多个库和可执行文件的 CMakeLists.txt 文件