我目前在我的项目根目录${SRCS}中的CMakeLists.txt文件中定义一个变量,列出了我的可执行文件所需的每个源文件:
SET (SRCS main.cpp
dir1/file1.cpp
dir1/file2.cpp
dir2/file3.cpp
dir2/file4.cpp)
Run Code Online (Sandbox Code Playgroud)
如何CMakeLists.txt在每个子目录中的文件中分发此列表?那是:
CMakeLists.txt
Adds main.cpp to SRCS and subdirectories dir1 and dir2
dir1/CMakeLists.txt
Adds file1.cpp, file2.cpp to SRCS
dir2/CMakeLists.txt
Adds file3.cpp, file4.cpp to SRCS
Run Code Online (Sandbox Code Playgroud)
sak*_*kra 29
最好隐藏SRCS在CMake 宏中设置变量的所有细节.然后可以在所有项目CMake列表文件中调用宏以添加源.
在CMakeLists.txt项目根文件夹中,添加以下宏定义:
macro (add_sources)
file (RELATIVE_PATH _relPath "${PROJECT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}")
foreach (_src ${ARGN})
if (_relPath)
list (APPEND SRCS "${_relPath}/${_src}")
else()
list (APPEND SRCS "${_src}")
endif()
endforeach()
if (_relPath)
# propagate SRCS to parent directory
set (SRCS ${SRCS} PARENT_SCOPE)
endif()
endmacro()
add_sources(main.cpp)
add_subdirectory(dir1)
add_subdirectory(dir2)
message(STATUS "${SRCS}")
Run Code Online (Sandbox Code Playgroud)
宏首先计算源文件相对于每个参数的项目根的路径.如果从项目子目录内调用宏,则需要使用PARENT_SCOPE选项将变量SRCS的新值传播到父文件夹.
在子目录中,您只需添加一个宏调用,例如dir1/CMakeLists.txt添加:
add_sources(file1.cpp file2.cpp)
Run Code Online (Sandbox Code Playgroud)
另外dir2/CMakeLists.txt:
add_sources(file3.cpp file4.cpp)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25665 次 |
| 最近记录: |