其实private/public 解决的是指示问题,本质上可以使用public 来解决, 可以减少坑。 下面是target_link_libraries中的解释,不想看英文的,直接拉到最后。 Link Inheritance Similarly, for anytarget, in the linking stage, we would need to decide, given theitemto be linked, whether we have to put theitemi...
在CMake 中,target_include_directories 和 target_link_libraries 命令使用 PRIVATE、PUBLIC 和 INTERFACE 关键字来控制包含目录和链接库的传递性。 PRIVATE:仅对目标自身可见。其他依赖该目标的目标无法访问这些包含目录或链接库。 PUBLIC:对目标自身和所有依赖该目标的目标都可见。即,包含目录或链接库会被传递给依赖该...
target_link_libraries(my_target INTERFACE yet_another_library) 这三种权限也适用于target_include_directories和target_compile_definitions等命令,决定了目标或其消费者如何继承这些属性。 3. PRIVATE权限详解 3.1 定义与用途 在CMake中,PRIVATE权限是我们在链接库时经常会遇到的一个关键词。简而言之,当我们说一个库...
在CMake中,当我们定义一个库或可执行文件,并希望它依赖于其他库或目标时,我们可以使用target_link_libraries或target_sources等命令来建立这种依赖关系。但除了这些基本命令,CMake还提供了三个关键字:PUBLIC, PRIVATE, 和 INTERFACE,用于更细致地控制这些依赖关系的作用域和可见性。 PUBLIC 当我们将一个目标A链接到另...
target_link_libraries(sample_add add_shared) # 若注释掉此句,则会报 error: sample_add.cpp:(.text+0x25): undefined reference to 'add(int, int)' 1. 2. 3. 4. 5. 6. 7. 8. 2.Libraries for a Target and/or its Dependents:PUBLIC, PRIVATE和INTERFACE关键字可用于在一个命令中指定link de...
target_link_libraries(main subtraction) # test no items target_include_directories(main PRIVATE) target_include_directories(main BEFORE PRIVATE) target_include_directories(main SYSTEM BEFORE PRIVATE) target_include_directories(main SYSTEM PRIVATE)
target_link_libraries(target_name [PRIVATE|PUBLIC|INTERFACE] library_name1 library_name2 ...) 其中: target_name是目标名称,可以是可执行文件、库或模块。 PRIVATE、PUBLIC和INTERFACE是可选的关键字,用于指定链接库的属性。具体含义如下: oPRIVATE:仅将库链接到目标自身。 oPUBLIC:将库链接到目标自身,并将库...
引用大川搬砖:cmake:target_** 中的 PUBLIC,PRIVATE,INTERFACE 1. 指令说明 target_include_directories():指定目标包含的头文件路径。官方文档 target_link_libraries():指定目标链接的库。官方文档 target_compile_options():指定目标的编译选项。官方文档 ...
target_link_libraries(bar PUBLIC foo)链接为public,main函数正常调用foo(),bar中正常调用foo(),库foo链接给bar,同时foo也被传给了main。 target_link_libraries(bar PRIVATE foo)编译,发现main.cpp: undefined reference to `foo()',main.cpp这个编译单元找不到foo()这个符号,库foo链接到bar就被终结了,bar自...
CMake中经常会使用target_**()相关命令,target_**()命令支持通过PUBLIC,PRIVATE和INTERFACE关键字来控制传播。本文主要介绍下这三个关键字的区别。 解释 以target_link_libraries(A B)命令为例,从理解的角度解释: PRIVATE依赖项B仅链接到目标A,若有C链接了目标A,C不链接依赖项B ...