而假如A引用了B(或者说目标A依赖于目标B),那么INTERFACE_INCLUDE_DIRECTORIES 中的路径就会赋给目标A的INCLUDE_DIRECTORIES。 所以,使用PRIVATE PUBLIC和INTERFACE就能控制是否将当前搜索路径传递给下一个目标。 PRIVATE就是不把当前的INCLUDE_DIRECTORIES 传递给INTERFACE_INCLUDE_DIRECTORIES 。 PUBLIC就是把当前的INCLUDE_DI...
A -> B -> C A link B时不管是private还是public都没关系,毕竟A不需要导出符号,也没有人以API方式调用它。 现在主要问题就是B这个库用private还是public. C是动态库。 如果B是动态或静态库,C是动态库,这个问题就会有影响。同样,如果B、C同为静态库时也会有问题。 B用private link C, 此时A link B,但...
target_link_libraries(subtraction_shared INTERFACE add_shared) # 也可以为PUBLIC;但不可以为PRIVATE,若为PRIVATE,则会报error:sample_add.cpp:(.text+0x25): undefined reference to `add(int, int)' add_executable(sample_add ${CMAKE_CURRENT_SOURCE_DIR}/samples/sample_add.cpp) target_link_libraries(...
CMake target_link_libraries Interface Dependencies - Stack Overflow CMake的链接选项:PRIVATE,INTERFACE,PUBLIC - 知乎 If you are creating a shared library and your source cpp files #include the headers of another library (Say, QtNetwork for example), but your header files don't include QtNetwork...
target_name是要链接库的目标的名称,例如一个可执行文件或一个库。PRIVATE,PUBLIC和INTERFACE是可选的...
target_link_libraries(target_name [PRIVATE|PUBLIC|INTERFACE] library_name1 library_name2 ...) 其中: target_name是目标名称,可以是可执行文件、库或模块。 PRIVATE、PUBLIC和INTERFACE是可选的关键字,用于指定链接库的属性。具体含义如下: oPRIVATE:仅将库链接到目标自身。 oPUBLIC:将库链接到目标自身,并将库...
target_link_libraries(bar PRIVATE foo) 编译,发现main.cpp: undefined reference to `foo()',main.cpp这个编译单元找不到foo()这个符号,库foo链接到bar就被终结了,bar自己能使用foo中的函数,但是外部链接bar的main不能使用foo的函数。 target_link_libraries(bar INTERFACE foo) ...
target_link_libraries(<target><LINK_PRIVATE|LINK_PUBLIC> <lib>...[<LINK_PRIVATE|LINK_PUBLIC> <lib>...]...) LINK_PUBLIC 和 LINK_PRIVATE 模式可用于在一个命令中指定链接依赖关系和链接接口。 此签名仅用于兼容性。请改用 PUBLIC 或 PRIVATE 关键字。
target_link_libraries 连接文件 target link libraries private,网上关于target_link_libraries中的PRIVATE,PUBLIC,INTERFACE 的解释大部分是错的,而且不是一般的错,是胡说。因为这三个属性在不同的命令中使用时意义不同,有很多是从target_include_directories中