将子目录中的源添加到cmake项目

我有没有被分成图书馆的项目,但源被组织在一个目录树。 我不知道如何告诉cmake去下一个目录,然后将该目录中的源添加到父目录中定义的项目。 我曾尝试以下几点:

在project / source / CMakelists.txt中:

set(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/unitTest/main.cpp ) add_subdirectory("${PROJECT_SOURCE_DIR}/folder1") add_executable(UnitTestRNG ${SOURCE} ${HEADERS}) 

然后在project / source / folder1 / CMakeLists.txt中:

 set(SOURCE ${SOURCE} ${CMAKE_CURRENT_SOURCE_DIR}/file1.cpp ${CMAKE_CURRENT_SOURCE_DIR}/file2.cpp ) set(HEADERS ${HEADERS} ${CMAKE_CURRENT_SOURCE_DIR}/file1.hpp ${CMAKE_CURRENT_SOURCE_DIR}/file2.hpp ) 

使用一些message()语句,我发现子文件夹将获得SOURCEvariables的内容,但是对于该variables的新赋值不会在返回到父CMakeLists.txt

寻找示例和cmake教程让我得出这样的结论: – 源文件结构通常在项目中是平坦的 – 如果代码被分成文件夹,通常会被分成相应的库。

我想知道是否有一些“最佳实践”,我试图通过这种结构来偏离。

就像arrowdodger的答案的第二部分所说:在project / source / folder1 / CMakeLists.txt中:

 set(SOURCE ${SOURCE} ${CMAKE_CURRENT_SOURCE_DIR}/file1.cpp ${CMAKE_CURRENT_SOURCE_DIR}/file2.cpp PARENT_SCOPE ) set(HEADERS ${HEADERS} ${CMAKE_CURRENT_SOURCE_DIR}/file1.hpp ${CMAKE_CURRENT_SOURCE_DIR}/file2.hpp PARENT_SCOPE ) 

你不能只是在project / source / CMakelists.txt中设置所有的源代码吗?

无论如何,你需要的是set命令上的PARENT_SCOPECACHE选项。