其实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链接到另...
那么在 hello-world/CMakeLists.txt 中应该写入: 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 ...
target_link_libraries(my_target PUBLIC another_library) 在上面的代码中,my_target不仅可以使用another_library,而且任何链接到my_target的其他目标也可以使用它。 正如《思考,快与慢》中所说:“我们过于依赖第一印象,往往忽略了深入的分析。”(Daniel Kahneman)。在编程中,我们可能会因为对某个工具或命令的第一印...
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(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(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 如果目标仅源文件中包含了依赖的头文件,那么这里就是PRIVATE 如果目标的头文件包含依赖,但源文件未包含,那么这里就是INTERFACE https://cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#transitive-usage-requirements...
target_link_libraries(my_target PRIVATE some_library) PUBLIC: 当目标自身需要此链接库,或者其他目标链接了这个目标时使用。 其他目标链接这个目标时,它们会继承这个链接库。 对于静态库,这意味着当目标被构建或者其他目标链接了这个目标时,公共依赖项会被链接。
在CMake中,target_link_libraries函数用于将一个目标(target)与所需的库进行链接。它的语法如下:vb...