【学习cmake】cmake如何使用链接库 (link_directories, LINK_LIBRARIES, target_link_libraries,FIND_PACKAGE)实践篇2

cmake中添加引用动态链接和静态链接库

ADD_EXECUTABLE(a.out ./main.cpp)
TARGET_LINK_LIBRARIES(a.out /usr/lib/libeg.so)

动态库的添加:

link_directories(${PROJECT_SOURCE_DIR}/lib) #添加动态连接库的路径
target_link_libraries(project_name -lmxnet ) #添加libmxnet.so
静态库的添加:

add_library(mxnet STATIC IMPORTED)
set_property(TARGET mxnet PROPERTY IMPORTED_LOCATION /path/to/libmxnet.a)
target_link_libraries(project_name mxnet ) #添加libmxnet.a
 

# 声明要求的 cmake 最低版本
cmake_minimum_required( VERSION 2.8 )

# 声明一个 cmake 工程
project(useHello)

# 设置编译模式
set( CMAKE_BUILD_TYPE "Debug" )

# VAR变量代表找到的库全路径,包含库文件名
#FIND_LIBRARY(libhello_shared /home/ubuntu/ch2/useHello)#bug

include_directories (${useHello_SOURCE_DIR})
MESSAGE(${useHello_SOURCE_DIR})#${PROJECT_SOURCE_DIR}

#增加src为link目录w-1
# link_directories(${PROJECT_SOURCE_DIR})#${PROJECT_SOURCE_DIR}
# MESSAGE(${PROJECT_SOURCE_DIR})
#增加src为link目录w-2
# link_directories("/home/ubuntu/ch2/useHello")
link_directories(/home/ubuntu/ch2/useHello)# "/"=/ 引号 可有可无   
# 添加一个可执行程序

add_executable(useHello useHello.cpp )
# 将库文件链接到可执行程序上
# target_link_libraries( useHello hello)
# target_link_libraries( useHello hello_shared )# w-1
target_link_libraries( useHello -lhello)#hello_shared=lhello # w-2

 

#增加src为link目录  link_directories

# 将库文件链接到可执行程序上 target_link_libraries

#增加src为link目录w-1
link_directories(${PROJECT_SOURCE_DIR})#${PROJECT_SOURCE_DIR}
# MESSAGE(${PROJECT_SOURCE_DIR})
#增加src为link目录w-2
# link_directories("/home/ubuntu/ch2/useHello")
link_directories(/home/ubuntu/ch2/useHello)# "/"=/ 引号 可有可无  
  
# 添加一个可执行程序
add_executable(useHello useHello.cpp )
# 将库文件链接到可执行程序上
# target_link_libraries( useHello hello)
target_link_libraries( useHello hello_shared )# w-1
# target_link_libraries( useHello -lhello)#hello_shared=lhello # w-2

 

target_link_libraries与link_libraries 区别

target_link_libraries(useHello /home/ubuntu/ch2/useHello/libhello_shared.so)
# target_link_libraries(useHello "/home/ubuntu/ch2/useHello/libhello_shared.so")
# link_libraries(useHello "/home/ubuntu/ch2/useHello/libhello_shared.so")#bug
# link_libraries(useHello /home/ubuntu/ch2/useHello/libhello_shared.so)#bug #undefined reference to `printHello()

路径错误

target_link_libraries 全路径,绝对路径

路径错误提示bug(路径拼写错误) “”  ""  ‘’英文双引号  或不加引号

#bug #undefined reference to `printHello()
#bug  #/usr/bin/ld: cannot find -l“home/ubuntu/ch2/usehello/libhello_shared.so”
In function `main':useHello.cpp:6: undefined reference to `printHello()'
 

LINK_LIBRARIES (添加需要链接的库文件路径,注意这里是全路径)
List of direct link dependencies.

比如:
LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libeng.so")
LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libmx.so")

也可以写成:
LINK_LIBRARIES("/opt/MATLAB/R

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值