C++ 在大型项目中以现代CMake方式添加标题
我正在做一个项目,包括一个基于SDL的游戏框架、一个编辑器和一个游戏。目录结构正在形成类似这样的结构(为简洁起见进行了编辑) 我的C++ 在大型项目中以现代CMake方式添加标题,c++,cmake,C++,Cmake,我正在做一个项目,包括一个基于SDL的游戏框架、一个编辑器和一个游戏。目录结构正在形成类似这样的结构(为简洁起见进行了编辑) 我的add_executable命令正在Game/Source/Runtime/Launch/Private中运行,并且依赖于其他模块中的文件 根据一些CMake how tos和对以下问题的公认回答,给定目标的头应该包含在add\u executable调用中,以便在makefile中作为依赖项列出 我的问题是,考虑到我的项目中有大量的头文件和目录,实现这一点最干净的
add_executable
命令正在Game/Source/Runtime/Launch/Private中运行,并且依赖于其他模块中的文件
根据一些CMake how tos和对以下问题的公认回答,给定目标的头应该包含在add\u executable
调用中,以便在makefile中作为依赖项列出
我的问题是,考虑到我的项目中有大量的头文件和目录,实现这一点最干净的方法是什么?我无法想象最佳实践是直接在add_executable
调用中维护一个巨大的文件列表,但我可能错了
我原以为每个目录的CMakeLists.txt都可以负责添加一个变量,该变量最终将在add_可执行文件中使用,但通过这么多文件分发该意图似乎是一个糟糕的做法。有更好的方法吗?您可以完全按照您发送的链接中的模式进行操作。对于每个库(我假设它们是CMake中的库/目标),请使用: 通过这样做,您可以告诉CMake私有文件夹仅用于当前目标,但如果有人将该目标用于另一个目标,则应该添加公共包含目录 现在,您只需执行以下操作:
target_link_libraries(${target} PRIVATE Framework_Source)
如果
Framework\u Source
是目标的名称${target}
是当前正在构建的目标的名称。我的建议是创建一组(可能是静态)库,并使主可执行文件依赖于这些库。只需跳过这些库的头文件,在add_executable
命令中只使用主应用程序直接需要的头文件。
target_include_directories(${target} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/Private PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/Public)
target_link_libraries(${target} PRIVATE Framework_Source)