c++ - 何时使用带有 target_include_directories 的 BUILD_INTERFACE 和 INSTALL_INTERFACE 生成器表达式?
问题描述
该target_include_directories
文档指出以下内容:
包含目录的使用要求通常在构建树和安装树之间有所不同。
BUILD_INTERFACE
和INSTALL_INTERFACE
生成器表达式可用于根据使用位置描述单独的使用要求。
我想让我的 CMake 库可安装,但我不确定这是否意味着我应该使用这些生成器表达式。目前,我的src/CMakeLists.txt
包含以下内容:
target_include_directories(mylib PRIVATE ${CMAKE_SOURCE_DIR}/include/mylib)
target_include_directories(mylib INTERFACE ${CMAKE_SOURCE_DIR}/include)
这允许我在#include
不指定父目录的情况下访问我的库的公共标题,同时仍然要求我的库的用户自己这样做。我的理解是,这是防止头文件名冲突的标准做法。
话虽这么说,我不相信这段代码能以目前的形式运行来安装库。解决此问题的首选方法通常是什么?
解决方案
推荐阅读
- r - xj[i] 中的错误:创建线性回归模型时下标类型“列表”无效
- javascript - Chrome - 调试 WebGL 崩溃(“老鼠!WebGL 遇到了障碍。”)
- node.js - Unable to find command: C:\Program Files\nodejs\node.exe
- android - 在不同线程中获取数据和图像
- javascript - JavaScript 的“新音频”不能与 AWS Cloudfront (CORS) 结合使用
- javascript - 有没有更有效的方法来过滤这个对象数组?
- c++ - 具有检查功能的简单数字生成器,以避免重复
- javascript - 更改 VuetifyJS DataTable 单元格的默认宽度
- python - Matplotlib bar chart from two variable column - Pandas data manipulation (mostly)
- c# - In C#, what is a good method for dealing with long template type names that include protected nested types?