添加静态库
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
其他可用的字符还有 PRIVATE
和 INTERFACE
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" )#拷贝到哪个目录
其实动态库基本都是拷贝到可执行文件目录下的,因为之所以叫动态库,就是程序在运行时加载的文件,所以要把程序依赖的动态库直接拷贝到可执行文件的目录下即可。