其实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...
所以,使用PRIVATE PUBLIC和INTERFACE就能控制是否将当前搜索路径传递给下一个目标。 PRIVATE就是不把当前的INCLUDE_DIRECTORIES 传递给INTERFACE_INCLUDE_DIRECTORIES 。 PUBLIC就是把当前的INCLUDE_DIRECTORIES 传递给INTERFACE_INCLUDE_DIRECTORIES 。 INTERFACE就是自己不使用当前的INCLUDE_DIRECTORIES ,但是把当前的INCLUDE_DIRECT...
其实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...
如果目标的头文件中包含了依赖的头文件(源文件间接包含),那么这里就是PUBLIC 如果目标仅源文件中包含了依赖的头文件,那么这里就是PRIVATE 如果目标的头文件包含依赖,但源文件未包含,那么这里就是INTERFACE https://cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#transitive-usage-requirements...
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_dire...
target_link_libraries(target_name [PRIVATE|PUBLIC|INTERFACE] library_name1 library_name2 ...) 其中: target_name是目标名称,可以是可执行文件、库或模块。 PRIVATE、PUBLIC和INTERFACE是可选的关键字,用于指定链接库的属性。具体含义如下: oPRIVATE:仅将库链接到目标自身。 oPUBLIC:将库链接到目标自身,并将库...
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(my_app PUBLIC my_public_lib PRIVATE my_private_lib...
target_link_libraries(mytarget PUBLIC thirdparty::library) ``` 在这个例子中,mytarget是项目中的目标,thirdparty::library是第三方库。使用PUBLIC关键字可以确保其他依赖目标也可以链接到这个库。 5.链接动态库 ``` target_link_libraries(mytarget PRIVATE -Wl,--whole-archive mylibrary -Wl,--no-whole-archiv...