我举了下面的例子来说明我的问题。这些项目具有以下结构:
CMakeLists.txt
Dir1
Dir2
Dir3
在CMakeLists.txt中,我有以下定义:
macro(obtain_sublist result _curdir)
set(curdir ${${_curdir}})
FILE(GLOB children RELATIVE ${curdir} ${curdir}/*)
SET(dirlist "")
FOREACH(child ${children})
IF(IS_DIRECTORY ${curdir}/${child})
LIST(APPEND dirlist ${child})
ENDIF()
ENDFOREACH()
SET(${result} ${dirlist})
endmacro()
set(curDir ${CMAKE_CURRENT_SOURCE_DIR})
obtain_sublist(subdir curDir)
foreach(var ${subdir})
add_subdirectory(${var})
endforeach()
在每个子目录(Dir1, Dir2 and Dir3
)内构建目标。当使用Visual Studio构建项目时,我可以清楚地观察到每个目标以及用于创建目标的相应CMakeLists.txt。但是,此示例中的顶级CMakeLists.txt在项目中是未显示的,因为它不会创建任何目标。有没有办法在项目中包含这个CMakeLists.txt?如果可能的话,我可以把它放在某个文件夹中吗?谢谢。
答案 0 :(得分:1)
它应该已经出现在我认为的ALL_BUILD
目标中。
如果需要,您可以创建一个自定义目标来保存它。在顶级CMakeLists.txt中:
add_custom_target(CMakeFiles SOURCES ${CMAKE_SOURCE_DIR}/CMakeLists.txt)
或者您可以将其添加到一个或多个或子目录中的现有目标。因此,在子目录CMakeLists.txt中,您可以添加:
add_executable(Dir1 dir1.cpp ${CMAKE_SOURCE_DIR}/CMakeLists.txt)
您可以使用source_group
在VS解决方案中创建目标的子文件夹(不需要与实际的文件系统文件夹相关):
source_group("root" FILES ${CMAKE_SOURCE_DIR}/CMakeLists.txt)