CMake生成没有glob的源文件列表

Sha*_*gon 7 c++ cross-platform cmake visual-studio visual-studio-2017

我目前正在使用这段代码来生成我的 CMake 源文件列表来编译我的 C++ 项目:

file(GLOB CPP_FILES src/*.cpp)
Run Code Online (Sandbox Code Playgroud)

正如我在此处读到的,CMake 不鼓励这样做,我想知道是否可以使用 CMake明确列出CMake的源文件,因为我不熟悉 Python 等脚本语言。

我问这个是因为将所有 cpp 文件手动添加到 CMake 中需要做很多工作,尤其是在与多人合作时。

该项目与平台无关,我的源文件位于子文件夹中。

uto*_*pia 9

CMake 没有本地方法可以为您执行此操作。

您可以为大型或共享项目做的是使用一个脚本,它可以由任何可以扫描文件系统或其他存储库的任何东西创建,以生成一个列出源文件的 CMake 文件。

然后你可以只include()生成这个 CMake 文件。

CMake 文件中的说明可能target_sources()用于已知目标。

CMakeLists.txt:

add_executable(myexe "")
include(sourcelist)
Run Code Online (Sandbox Code Playgroud)

源列表.cmake:

target_sources(myexe PRIVATE
    mysourcefile1.cpp
    mysourcefile2.cpp
)
Run Code Online (Sandbox Code Playgroud)

或者通过附加到变量:

CMakeLists.txt:

include(sourcelist)
add_executable(myexe ${sources})
Run Code Online (Sandbox Code Playgroud)

源列表.cmake:

set(sources ${sources} 
    mysourcefile1.cpp
    mysourcefile2.cpp
)
Run Code Online (Sandbox Code Playgroud)

  • @shadowdragon 正是使用您添加的信息的人。“PRIVATE”表示只有当前目标使用它。“INTERFACE”表示只有其他目标使用它,而当前目标没有使用它。“PUBLIC”表示该目标和其他目标都使用该信息。由于这种情况下的信息只是可执行文件的源文件名,因此几乎可以肯定它对其他目标完全无用,因为可执行目标几乎从未被其他目标使用(与库不同),即使它们被使用,它也不会用于源。在这种情况下,您可以使用 PRIVATE 或 PUBLIC。 (2认同)