【发布时间】:2021-03-18 23:28:16
【问题描述】:
我对 CMake 完全陌生,从未使用过它,总是像普通人一样依赖 VS 自动管理系统。我正在做一个学校作业,我正在制作一个游戏,我正在使用 CLion,因为已经为它制作了模板。
我必须将我创建的每个新文件都添加到 CMake 'add_executable' 关键字中才能编译,并且列表变得相当长。
# project
add_executable(project
src/project/main.cpp
src/project/Scenes/SceneMenu/SceneMenu.cpp
src/project/Scenes/SceneMenu/SceneMenu.h
src/project/Objects/Object.h
src/project/Camera/Camera.h
src/project/Camera/CameraGame/CameraGame.cpp
src/project/Camera/CameraGame/CameraGame.h
src/project/Scenes/SceneGame/SceneGame.cpp
src/project/Scenes/SceneGame/SceneGame.h
src/project/Scenes/Scene.h
src/project/Scenes/SceneController.h
src/project/Objects/Menu/Ball/Ball.h
src/project/Objects/Menu/Ball/Ball.cpp
src/project/Objects/Game/Church/Church.h
src/project/Objects/Game/Church/Church.cpp
src/project/Objects/Game/Leg/Leg.h
src/project/Objects/Game/Leg/Leg.cpp
src/project/Objects/Game/Ground/Ground.h
src/project/Objects/Game/Ground/Ground.cpp
src/project/Objects/Axial/Axis.h
src/project/Objects/Axial/Axis.cpp
src/project/Objects/Game/Leg/LegLower.h
src/project/Objects/Game/Leg/LegLower.cpp
src/project/Objects/Game/Skybox/Skybox.cpp
src/project/Objects/Game/Skybox/Skybox.h
src/project/Objects/Game/Mountain/Mountain.cpp
src/project/Objects/Game/Mountain/Mountain.h
src/project/Objects/Game/Mountain/MountainSpawner.h
src/project/resources.h
src/project/Animations/Bezierpath.h
src/project/Camera/CutsceneCamera/CutsceneCamera.cpp
src/project/Camera/CutsceneCamera/CutsceneCamera.h
src/project/Scenes/SceneCut/SceneCut.cpp
src/project/Scenes/SceneCut/SceneCut.h)
target_link_libraries(project ppgso shaders)
install(TARGETS project DESTINATION .)
file(COPY "data/" DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
install(DIRECTORY data/ DESTINATION .)
有什么方法可以改进吗?.. 也许是我不必添加我创建的每个新源文件的方法,或者这是唯一的方法?
这样做很烦人,因为它在重构或重构期间发生在我身上几次,由于 CMakeLists.txt 中某些文件的错误顺序或某些未重命名,它无法编译自动,甚至被删除
【问题讨论】:
-
你希望 CMake 收集目录中的所有源(或目录)吗?如果是,请查看该问题:stackoverflow.com/questions/3201154/…。否则,不清楚您想在长长的源文件列表中改进什么。
-
这正是我想要的。 GLOB_RECURSE 是我的救星。谢谢,我很难找到这个
-
@JackAvante 不要全局查找源文件。 The documentation even tells you not to do it.
-
Verbatim:“我们不建议使用 GLOB 从源代码树中收集源文件列表。如果在添加或删除源时没有 CMakeLists.txt 文件更改,则生成的构建系统无法知道何时要求 CMake 重新生成。
CONFIGURE_DEPENDS标志可能无法在所有生成器上可靠地工作,或者如果将来添加了一个不能支持它的新生成器,使用它的项目将被卡住。即使CONFIGURE_DEPENDS可靠地工作,每次重建都需要进行检查。”
标签: cmake