target_link_directories(),target_link_libraries(),target_include_directorie() 等目标链接相关的命令总结

一直很困惑 target_link_directories(),target_link_libraries(),target_include_directorie() , include_directories() ,target_sources()。所以查了资料,做了相关的实验。详细的介绍了一下它们的作用和区别。最后写了一个小案例用来测试。

target_link_directories()和target_link_libraries()

"target_link_directories"是一种指令,用于将链接库的目录添加到一个特定的CMake目标中。

具体来说,当你使用CMake来构建一个项目时,你可以用"target_link_directories"指令将一个目标与一个或多个库目录链接起来。例如,假设你的项目需要链接一个名为"mylib"的库,而这个库在"/path/to/mylib"目录中。那么,你可以使用以下指令将这个目录添加到你的目标中:

target_link_directories(mytarget PUBLIC /path/to/mylib)

这样做可以告诉CMake在链接"mytarget"目标时搜索"/path/to/mylib"目录中的库文件。注意,这只是告诉CMake搜索库文件的路径,实际上还需要使用target_link_libraries指令来将库链接到目标中,例如:

target_link_libraries(mytarget PUBLIC mylib)

总结:
target_link_directories,将库的目录告知cmake,target_link_libraries指定目标链接的库。

target_include_directorie() 和 include_directories()

使用一个库时,通常需要包含该库的头文件才能正确地使用库中定义的函数和类等。在CMake中,可以使用"target_include_directories"指令将头文件目录添加到特定的目标中。

例如,假设你正在使用一个名为"mylib"的库,该库的头文件位于"/path/to/mylib/include"目录中。你可以使用以下指令将该目录添加到你的目标中:

target_include_directories(mytarget PUBLIC "/path/to/mylib/include"

这将告诉CMake在编译"mytarget"目标时搜索"/path/to/mylib/include"目录中的头文件。
注意,如果你的库和头文件都在同一个目录下,你可以直接使用"target_link_libraries"和"target_include_directories"指令,例如:

target_link_libraries(mytarget PUBLIC mylib) 
target_include_directories(mytarget PUBLIC include)

include_directories()target_link_libraries()是类似的功能,官方推荐使用target_link_libraries()

target_source()

使用 target_sources 命令来指定一个目标的源文件列表,这个命令可以用来为一个目标添加源文件或删除源文件。使用这个命令可以避免在 add_library 或 add_executable 命令中列出大量的源文件,从而使 CMakeLists.txt 文件更加简洁。

target_sources 命令的语法为:

target_sources(target-name
    PRIVATE source1 source2 ...
    INTERFACE source3 source4 ...
    PUBLIC source5 source6 ...
)

其中,PRIVATE、INTERFACE 和 PUBLIC 关键字用来指定源文件的访问权限,可以根据需要选择其中之一。接下来的参数是源文件列表,可以使用相对路径或绝对路径来指定。例如:

target_sources(mytarget PRIVATE
 src/file1.cpp
  src/file2.cpp 
  include/myheader.h )

这个命令将 src 目录下的 file1.cpp 和 file2.cpp 以及 include 目录下的 myheader.h 添加到 mytarget 目标的私有源文件列表中。

实践

cmake_minimum_required(VERSION 3.2)

project(visionLib
        VERSION 0.0.0
        DESCRIPTION " "
        HOMEPAGE_URL "www.schneider.com")

set(CMAKE_CXX_STANDARD 11)

set(CMAKE_CXX_STANDARD_REQUIRED)

find_package( OpenCV 4.6.0 REQUIRED)

message("OpenCV version : ${OpenCV_VERSION}")

include_directories(./src)

add_library(
        ${CMAKE_PROJECT_NAME}
        SHARED
        )

target_include_directories(
        ${CMAKE_PROJECT_NAME}  PUBLIC
        ${OpenCV_INCLUDE_DIRS}
        ./include
)

target_sources(
        ${CMAKE_PROJECT_NAME} PRIVATE
        ./src/edge_svm.cpp
)

target_link_directories(
        ${CMAKE_PROJECT_NAME}  PUBLIC
        ${OpenCV_LIBS}
)

target_link_libraries(
        ${CMAKE_PROJECT_NAME}  PRIVATE
        ${OpenCV_LIBS}
)



directories
CMakeLists.txt编译成功:

PS D:\work\EAE_VISION_LIBRARY\cv_library\visionLib> cmake -S . -B build        
-- Building for: Visual Studio 17 2022
-- Selecting Windows SDK version 10.0.22621.0 to target Windows 10.0.19044.
-- The C compiler identification is MSVC 19.34.31942.0
-- The CXX compiler identification is MSVC 19.34.31942.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.34.31933/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features                                                                                                                    
-- Detecting C compile features - done                                                                                                             
-- Detecting CXX compiler ABI info                                                                                                                 
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.34.31933/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features                                                                                                                    
-- Detecting CXX compile features - done
-- Found OpenCV: C:/Program Files (x86)/opencv/build (found suitable version "4.6.0", minimum required is "4.6.0") 
OpenCV version : 4.6.0
-- Configuring done (3.8s)
-- Generating done (0.0s)
-- Build files have been written to: D:/work/EAE_VISION_LIBRARY/cv_library/visionLib/build
  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZUSTAND

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值