C++-Cmake指令:target_link_libraries

target_link_libraries:该函数声明了链接时需要参与的依赖库名称或target。其名称可包含完整路径。

命名的必须是由add_executable()或add_library()之类的命令创建的。

target_link_libraries命令的格式:

target_link_libraries( ... ... ...)
target_link_libraries( 
                       ... 
                      [ ...]...)

例如:

target_link_libraries(sample PUBLIC CURL::curl glib m)

注意:由于一个target中包含多个属性,一般情况下包含了头文件路径。所以使用target作为参数传入此函数时,无需调用 target_include_directories 再次声明添加头文件路径。

案例

target_link_libraries(PUBLIC target target1 target2)
target_link_libraries(PUBLIC target3 target target4)
  • PUBLIC:表示target能够使用target1&target2库中的内容,target3 能够使用target1 & target2中定义的内容;默认状态为PUBLIC;
target_link_libraries(PRIVATE target target1 target2)
target_link_libraries(PRIVATE target3 target target4)
  • PRIVATE:表示target能够使用target1&target2库中的内容,target3不能使用target1&target2中定义的内容,只能使用target中定义的内容;
target_link_libraries(INTERFACE target target1 target2)
target_link_libraries(INTERFACE target3 target target4)
  • INTERFACE:表示target无法使用target1&target2的内容,但是target3 能够使用target1 & target2;

常用方式

经常的使用方式是

target_link_libraries(target Third_part_lib)

Third_part_lib参数,每个第三库会进行定义,具体的名称可以找到库的说明文档进行查看。

target_link_libraries(target ${OpenCV_LIBS})

作用域说明

target1:
#include “opencv” 
cv::imwait(0);

target2: 
#include “opencv” 
cv::imwait(0); 
cv::imwrite();

target4: 
#include “opencv” 
cv::imwait(0); 
cv::imwrite();

target_link_libraries(target1 OpenCV)
target_link_libraries(target target1 target2)
target_link_libraries(target3 target target4)

target2和target4能使用imwait(0),但是不能使用imwrite(),除非在target2和target4的CMakeLists中添加target_link_libraries(target2/4 OpenCV);

#Cmake#__target_link_libraries函数的使用说明_caofolinzi的博客-CSDN博客

CMake教程系列-04-编译相关函数 - 知乎

CMake的add_library与target_link_libraries_物随心转的博客-CSDN博客

你可能感兴趣的:(#,C++/CMAKE,c++,CMAKE)