CMake target_include_directories:我使用 PUBLIC、PRIVATE 还是 INTERFACE?

2023-12-07

我有一个 CMake 库add_library(helpers helpers.h)我想通过以下方式包含源文件target_include_directories。然后我必须在参数之间进行选择PRIVATE, PUBLIC and INTERFACE.

有什么不同?


  1. PRIVATE:包含只能由助手库本身使用。
  2. PUBLIC:这些包含内容可以由助手库本身以及使用助手库的任何目标使用,例如通过target_link_libraries(MainApplication PUBLIC libhelpers).
  3. INTERFACE:包含不能由帮助程序库使用,只能由使用帮助程序库的目标使用。

This example说明了可能的进口。结构:

│   CMakeLists.txt
│   helper.cpp
│   main.cpp
│
├───details_interface
│       details_interface.cpp
│
├───details_private
│       details_private.cpp
│
└───details_public
        details_public.cpp

CMakeLists.txt:

cmake_minimum_required(VERSION 3.1)
set(CMAKE_CXX_STANDARD 17)
project(cmake_experiment)

add_executable(cmake_experiment main.cpp)

target_link_libraries(cmake_experiment libhelper)

add_library(libhelper helper.cpp)

target_include_directories(libhelper
        INTERFACE details_interface
        PUBLIC details_public
        PRIVATE details_private)

主要.cpp:

#include <iostream>

#include "details_public.cpp"
#include "details_interface.cpp"

// fatal error: details_private.cpp: No such file or directory:
// #include "details_private.cpp"

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

助手.cpp:

#include "details_public.cpp"
#include "details_private.cpp"

// fatal error: details_interface.cpp: No such file or directory:
// #include "details_interface.cpp"

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CMake target_include_directories:我使用 PUBLIC、PRIVATE 还是 INTERFACE? 的相关文章

随机推荐

  • 让函数按非内置类型的 const 值返回的用例有哪些?

    最近我读到 从函数返回值来限定非内置类型的返回类型 const 是有意义的 例如 const Result operation do something return Result 我正在努力理解这样做的好处 一旦返回对象 调用者肯定会选择
  • .Net 图表 - 具有不同间隔的 X 轴 [重复]

    这个问题在这里已经有答案了 我正在使用 Net 图表 其中 我显示了间隔为 28 天的折线图 这是我的代码 Chart1 ChartAreas ChartArea1 AxisX IntervalOffset 1 Chart1 ChartAr
  • 嘲笑GAE开发服务器?

    我正在尝试在我的开发 GAE 服务器上模拟 HTTPServletRequest 数据 我正在运行 Eclipse 插件 1 3 7 我尝试这样做 package com FOO madservice servlet mock import
  • JAVAFX 11 不支持 ECMAScript6 和 css3

    我正在使用 JAVA FX 11 的一些绘图工具创建一个网页浏览exp 但是在尝试加载具有以下功能的javascript代码时let and const使用这些变量只是被忽略并抛出异常 我使用的是 Maven 3 8 0 Java 1 8
  • PHP:gettext 需要 LC_MESSAGES 目录吗?

    为了翻译我的 PHP 应用程序 我使用在 gettext 模块中编译的方法 这是根据文档制作的翻译目录树 locale cs CZ LC MESSAGES messages po messages mo de DE LC MESSAGES
  • 如何显示等待 gif 直到图像完全加载

    大多数流行的浏览器在渲染图像时 会在加载时从上到下逐行显示图像 我有一个要求 即在加载图像时应显示等待 gif 当图像完全加载时 应该显示它而不是等待 gif 你可以使用 jQueryload method 你可以看这里 http jque
  • BAT 文件:打开新的 cmd 窗口并在其中执行命令

    我正在尝试在 BAT 文件中打开一个新的命令窗口 start windir system32 cmd exe 打开后 我想在新窗口中执行 BAT 命令 echo test in new window 我怎样才能做到这一点 您可能已经找到了答
  • 用Activity实现OnClickListener有什么效果?

    我不明白为什么我必须实现 OnClickListener 才能使用 OnClick 方法 假设这段代码 public class KlickitestActivity extends Activity implements OnClickL
  • 为什么提示用户输入字符串/选项后字符串比较无法按预期工作?

    除了空格和不需要的百分号之外 这是编写这些批处理代码行的正确方法吗 name cls echo now that we ve got your color figured out what about your name echo simp
  • 如何使用第一个字符作为部分名称

    我正在使用核心数据作为表视图 并且我想使用每个结果的第一个字母作为节标题 这样我就可以在侧面获取节索引 有没有办法用关键路径来做到这一点 像下面这样 我用的地方name firstLetter as the sectionNameKeyPa
  • 从 Bat 文件执行 Java 时包含 Jar

    我想从 bat 文件执行 Java 类 它包括使用opencsv jar 下面是代码 echo off set path PATH C Program Files x86 Java jdk1 6 0 bin javac cp opencsv
  • 如何从更深的目录中的文件导入模块?

    假设我的项目结构如下 project important py files file1 py 文件 important py 包含重要类 如何从 file1 导入类 重要 而 file1 是正在执行的 python 文件 我找到的唯一解决方
  • 以编程方式将 iPhone 重置为出厂设置

    有没有一种方法可以让我们以编程方式将 iPhone 设置重置为出厂默认设置 我们在 设置 应用程序的 常规 部分中有一个 重置 选项 我们可以通过编程方式访问它吗 谢谢 苏德希尔 SDK 不支持此功能 也许你可以对越狱手机做一些事情 这显然
  • 如何在 Matlab 中隔离单元测试

    给定一个中等规模 科学 的代码库 如何继续构建单元测试套件 我需要测试本地函数以及隐藏方法 但到目前为止我不想修改 扩展类 这是可能的还是我需要以某种方式注入测试用例 我该如何最好地实施这个 Thanks PS 我知道单元测试通常是指测试整
  • QTableView,如何更改拖动多个项目的显示

    我有一个带有我自己实现的 QAbstractItemModel 的 QTableView 我可以在其中拖放多个项目 我的问题是 当拖动项目并尝试将它们放入目标单元格时 用户不太清楚结果是什么 例如 我有以下内容 但我更喜欢像默认窗口显示那样
  • 在 Boost Python 中公开一个非常量但不可复制的成员

    这是我的问题 我有两个这样的课程 class Signal public void connect sig connect private boost signal2 signal sig class MyClass public Sign
  • 在渲染期间/之后将调试跟踪添加到 Symfony 3.4 twig 模板

    我正在寻找一种无缝的方法来做到这一点 使用 Symfony 3 4 我需要一种方法 让渲染的页面知道 对于任何元素 文本 它来自哪个树枝模板 注意 我已经检查过Twig 如果启用调试模式则显示模板名称 但该线程是关于使用 Twig 而不是
  • C++ 预处理器与 C 预处理器相同吗?

    我想知道 C 和 C 的预处理器有何不同C are 提问的原因是这个问题关于特定于预处理器的问题 其中解决该问题的标准段落具有不同的措辞 以及不同的段落编号 并且关于true and falseC 中的关键字 那么 是否还有更多差异 或者这
  • 如何使用 Ember.js 和 Handlebars.js 渲染(Twitter Bootstrap)网格?

    我很难找到一种使用 Ember Handlebars 渲染以下标记的方法 div class row fluid div class span4 Item 1 row 1 column 1 div div class span4 Item
  • CMake target_include_directories:我使用 PUBLIC、PRIVATE 还是 INTERFACE?

    我有一个 CMake 库add library helpers helpers h 我想通过以下方式包含源文件target include directories 然后我必须在参数之间进行选择PRIVATE PUBLIC and INTER