Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在大型项目中以现代CMake方式添加标题_C++_Cmake - Fatal编程技术网

C++ 在大型项目中以现代CMake方式添加标题

C++ 在大型项目中以现代CMake方式添加标题,c++,cmake,C++,Cmake,我正在做一个项目,包括一个基于SDL的游戏框架、一个编辑器和一个游戏。目录结构正在形成类似这样的结构(为简洁起见进行了编辑) 我的add_executable命令正在Game/Source/Runtime/Launch/Private中运行,并且依赖于其他模块中的文件 根据一些CMake how tos和对以下问题的公认回答,给定目标的头应该包含在add\u executable调用中,以便在makefile中作为依赖项列出 我的问题是,考虑到我的项目中有大量的头文件和目录,实现这一点最干净的

我正在做一个项目,包括一个基于SDL的游戏框架、一个编辑器和一个游戏。目录结构正在形成类似这样的结构(为简洁起见进行了编辑)

我的
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)