有没有更好的办法?
不,这是通常的做法。使用.pri
文件包含任何库/子项目。当然,您可以将子项目设为 git-submodule。
我可以在后面的行中定义 SOURCES 吗?
简短的回答:没有
例子:
假设我们有一个带有单个文件的小项目,a.cpp
如下CMakeLists.txt
所示:
cmake_minimum_required(VERSION 3.12)
project(testing)
add_executable(testing ${sources})
#defining ${sources} later
set(sources a.cpp)
如果您尝试构建它,将导致错误:
No SOURCES given to target: testing
我假设您想将sources
变量的定义分离到一个单独的文件中。在这种情况下,我们可以如下解决。假设我们有一个 dir 结构如下:
src/
|--lib/
|--tests/
|---- CMakeLists.txt
CMakeLists.txt
main.cpp
我们的 cmake 文件将与之前的这些附加更改相同 add_executable
:
add_subdirectory(tests)
在CMakeLists.txt
里面的文件中tests/
你可以定义${SOURCES}
变量:
set(SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/test.cpp
PARENT_SCOPE
)
请注意,您需要PARENT_SCOPE
在此处使此SOURCES
变量对父目录可见,在我们的例子中是src/
现在在我们的 mainCMakeLists.txt
我们可以使用这个变量:
add_executable(tests ${SOURCES})
第二个也是更重要的:这样做是个好主意吗?
这取决于。如果您有一个简单的单目录项目,则没有必要。如果您有多个目录,那么当然,每个目录都应该有自己的CMake
文件,该文件定义了自己的变量。CMake 文件是代码,它们应该被视为代码,这意味着它们应该是干净的、模块化的和可读的。