cmake文件添加静态库和动态库

2022-10-26  本文已影响0人  岁月静好忄
添加静态库
target_link_libraries( ${PROJECT_NAME} PUBLIC E:/Project/cpp/learnOpenGL/ThirdParty/glfw/glfw3.lib )

说明:
1、target_link_libraries必须放在add_executable或者add_library之后
2、${PROJECT_NAME}是工程名称,一般设置了project(HelloWorld)才会直接用${PROJECT_NAME}
3、PUBLIC其他可用的字符还有 PRIVATEINTERFACE

PUBLIC 在public后面的库会被Link到你的target中,并且里面的符号也会被导出,提供给第三方使用。
PRIVATE 在private后面的库仅被link到你的target中,并且终结掉,第三方不能感知你调了啥库
INTERFACE 在interface后面引入的库不会被链接到你的target中,只会导出符号。

为了防止找不到符号和链接问题,推荐使用PUBLIC
4、E:/Project/cpp/learnOpenGL/ThirdParty/glfw/glfw3.lib这一串东西就是静态库的位置。

添加动态库
## 拷贝单个动态库文件
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD       
    COMMAND ${CMAKE_COMMAND} -E copy_if_different 
       "E:/Project/cpp/learnOpenGL/ThirdParty/opencv-3.4.6/x64/vc16/bin/opencv_world346d.dll"  #需要拷贝的文件 
        "${CMAKE_BINARY_DIR}/Debug") #拷贝到哪个目录

## 拷贝多个动态库文件,直接将所有的动态库放到文件夹下,拷贝文件夹即可
add_custom_command( TARGET ${PROJECT_NAME} POST_BUILD 
    COMMAND ${CMAKE_COMMAND} -E copy_directory 
   "${CMAKE_CURRENT_SOURCE_DIR}/../ThirdParty/OpenCV/bin/win64"  #需要拷贝的文件夹
   "${CMAKE_BINARY_DIR}/Debug" )#拷贝到哪个目录

其实动态库基本都是拷贝到可执行文件目录下的,因为之所以叫动态库,就是程序在运行时加载的文件,所以要把程序依赖的动态库直接拷贝到可执行文件的目录下即可。

上一篇下一篇

猜你喜欢

热点阅读