使用CMake的一个可执行文件的多个源目录

rea*_*alh 3 cmake subdirectory

我希望我的源在许多子目录中组织,但能够创建单个可执行文件而无需为每个子目录构建库.CMake能做到吗?就像是:

ADD_EXECUTABLE(foo a/main.cpp a/other.cpp b/another.cpp)

这么简单吗?使用/作为目录分隔符而不管平台?

Ser*_*lov 10

这是我的简单例子

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project(foo CXX)
# get all *.cpp files recursively
file(GLOB_RECURSE SRC_FILES ${PROJECT_SOURCE_DIR}/*.cpp)
add_executable(foo ${SRC_FILES})
Run Code Online (Sandbox Code Playgroud)


Rom*_*lov 5

另一个变体(对于大型代码库而言可能更好)是CMakeLists.txt对每个子目录使用单独的变体,在其中您使用隔离目录的源添加到目标target_sources,也许某些特定的配置设置\包括这些源的条件:

target_sources( SomeExeOrLib PRIVATE source1.h source1.cpp )
Run Code Online (Sandbox Code Playgroud)

在这里,您还可以通过指定来控制范围PRIVATE,其他选项是INTERFACEPUBLIC。在此处查看详细信息:https : //cmake.org/cmake/help/v3.3/command/target_sources.html