我正在从事一个项目,该项目包括基于SDL的游戏框架,编辑器和游戏。目录结构即将变成这样(为简便起见进行编辑)
├── CMake
├── Libraries
├── Resources
└── Source
├── Editor
├── Framework
│ └── Source
│ ├── AI
│ │ ├── Private
│ │ └── Public
│ ├── Game
│ │ ├── Private
│ │ └── Public
│ ├── Graphics
│ │ ├── Private
│ │ └── Public
│ └── Networking
├── Game
│ └── Source
│ └── Runtime
│ └── Launch
│ ├── Private
│ └── Public
└── Server
我的add_executable
命令正在游戏/源代码/运行时/启动/私人中运行,并且依赖于其他模块中的文件。
根据一些CMake的操作方法和对以下问题的接受的回答,给定目标的标头应包含在add_executable
调用中,以便它们在makefile中作为依赖项列出。 / p>
How to properly add include directories with CMake
我的问题是,鉴于我的项目中有很多头文件和目录,最干净的方法是什么?我无法想象最佳实践是直接在add_executable
调用中维护庞大的文件列表,但是我可能是错的。
我当时在想,每个目录的CMakeLists.txt可能负责添加到最终将在add_executable中使用的变量,但是通过如此多的文件分发该意图似乎是不明智的做法。有更好的方法吗?
答案 0 :(得分:1)
您可以完全按照您发送的链接中的模式进行操作。对于每个库(我想它们都是CMake中的库/目标),请使用:
target_include_directories(${target} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/Private PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/Public)
这样做,您告诉CMake私有文件夹仅用于当前目标,但是如果有人将目标用于另一个目标,则应该添加公共包含目录。
现在,您只需要执行以下操作:
target_link_libraries(${target} PRIVATE Framework_Source)
如果Framework_Source
是目标的名称。 ${target}
是您当前正在构建的目标的名称。