包括在子项目中
Include includes in subproject
我有项目B作为项目a的子项目。两个项目都包含一个用于存储头库的include目录。文件夹结构如下:
projectA/CMakeLists.txt
projectA/A.cpp
projectA/include/projectB/CMakeLists.txt
projectA/include/projectB/B.h
projectA/include/projectB/include/boost
projectA/include/projectB/include/...
在B.h内部,我正在使用Boost,所以包含行看起来像这样:
#include <boost/algorithm/string.hpp>
在A.cpp中,我包括B.h.
#include <B.h>
在项目A/CMakeLists.txt中,我包括项目B及其所有包含,如下所示:
include_directories(
include/projectB
include/projectB/include/boost
include/projectB/include/...)
如果我没有包括projectB使用的所有库目录,我就无法编译,因为编译器找不到boost。(我得到一个错误,上面写着:boost/algorithm/string.hpp: No such file or directory
(
有没有一个更简单的过程让projectA从projectB导入所有includes并更改路径以反映此项目层次结构?
对于现代CMake(即3.x(,不建议再使用include_directories
。另一种选择是为每个目标定义具有适当"可见性"的包含目录。
假设projectA
是如下在projectA/CMakeLists.txt
中定义的静态或共享库,其中projectA_SOURCES
是该库的所有源文件(即,不是头文件(的列表。
add_library(projectA ${projectA_SOURCES})
target_include_directories(projectA
PUBLIC ${CMAKE_CURRENT_LIST_DIR}/include/projectB/include
${CMAKE_CURRENT_LIST_DIR}/include/projectB/include/boost
PRIVATE ${CMAKE_CURRENT_LIST_DIR}/include/projectB)
然后,在定义了目标projectB
(作为库或可执行文件,这无关紧要(后的projectB/CMakeLists.txt
中:
target_include_directories(projectB
PUBLIC ${CMAKE_CURRENT_LIST_DIR}/include/projectA/include
PRIVATE ${CMAKE_CURRENT_LIST_DIR}/include/projectA)
target_link_library(projectB
PUBLIC projectA)
相关文章:
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 为什么 cmake 许可证<>样式不包括?
- 计算平均值,不包括上次得分
- 从多个源构造一个对象,包括一个对象向量
- 在编译中包括 Botan 2
- 将值从另一个数组写入数组,不包括不需要的值 C++
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- 包括C++头文件
- CPP 包括 Azure DevOps 中的目录设置
- 包括STL,而不会乱扔全球范围
- 如何反转我的输入,包括否定
- 包括没有完整路径的我的库
- 如何在 android ndk 上链接 C 和 C++ 代码,以及 C 和 C++ 运行时库(包括 STL)?
- C++包括类名间距和类实例化
- 通过 CMake 添加子项目
- 链接错误,包括我创建的相同头文件 - C++
- 标头,包括在 Swift 项目中使用C++文件时的错误
- 如果语句不包括文本行?
- 包括在子项目中