其实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_link_libraries或target_sources等命令来建立这种依赖关系。但除了这些基本命令,CMake还提供了三个关键字:PUBLIC, PRIVATE, 和 INTERFACE,用于更细致地控制这些依赖关系的作用域和可见性。 PUBLIC 当我们将一个目标A链接到另...
target_link_libraries(my_target INTERFACE yet_another_library) 这三种权限也适用于target_include_directories和target_compile_definitions等命令,决定了目标或其消费者如何继承这些属性。 3. PRIVATE权限详解 3.1 定义与用途 在CMake中,PRIVATE权限是我们在链接库时经常会遇到的一个关键词。简而言之,当我们说一个库...
target_link_libraries(hello-world INTERFACE hello) target_include_directories(hello-world INTERFACE hello) PUBLIC:公开的。PUBLIC = PRIVATE + INTERFACE。生成 libhello-world.so 时,在 hello_world.c 和 hello_world.h 中都包含了 hello.h。并且 main.c 中也需要使用 libhello.so 提供的功能。那么在 hel...
target_include_directories(main PUBLIC include) add_library(subtraction source/subtraction.cpp) target_include_directories(subtraction PRIVATE include) target_link_libraries(main subtraction) # test no items target_include_directories(main PRIVATE)
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...
PUBLIC:公开的。PUBLIC = PRIVATE + INTERFACE。生成 libhello-world.so 时,在 hello_world.c 和 hello_world.h 中都包含了 hello.h。并且 main.c 中也需要使用 libhello.so 提供的功能。那么在 hello-world/CMakeLists.txt 中应该写入: target_link_libraries(hello-world PUBLIC hello)target_include_direct...
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自...
抽象版解释 以target_link_libraries(A B)命令为例,从理解的角度解释:PRIVATE依赖项B仅链接到目标A,...
CMake中经常会使用target_**()相关命令,target_**()命令支持通过PUBLIC,PRIVATE和INTERFACE关键字来控制传播。本文主要介绍下这三个关键字的区别。 解释 以target_link_libraries(A B)命令为例,从理解的角度解释: PRIVATE依赖项B仅链接到目标A,若有C链接了目标A,C不链接依赖项B ...