VS2019+cmake 方式添加ffmpeg库文件,cmake添加lib文件dll文件,包含目录示例

cmake_minimum_required(VERSION 3.10)
project(${PROJECT_NAME} CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED on)
project(wfdb_demo)
#设置ffmpeg路径,也可以是其他任意开发库的路径
set(ffmpeg501 "D:/work/ffmpeg-5.0.1-full_build-shared/ffmpeg-5.0.1-full_build-shared")
#设置ffmpeg包含目录和lib路径
 include_directories(${ffmpeg501}/include/)
 link_directories(${ffmpeg501}/lib/)

 #编译测试程序,只有一个main.cpp
 add_executable(main main.cpp) 

 #下面这段用法较为高级,是将指定目录下的所有dll文件复制到运行目录,
 #并更加release/debug,创建目录,需要指定的目录可以自行更改
 #PROJECT_BINARY_DIR 代表编译出来的exe所在的目录
 #本示例是将ffmpeg的文件复制到三个目录,
 #支持cmake和vs2019直接编译生成exe,vs2019打开生成后,会自动区分release 和debug目录。
 #也就是PROJECT_BINARY_DIR的值已经被分开了。
 
 #最后
 set(dll_src ${ffmpeg501}/bin/*.dll)

 FILE(GLOB Plugin_Runtime_Debug_DLL_FILES CONFIGURE_DEPENDS ${dll_src}) 
FILE(GLOB Plugin_Runtime_Release_DLL_FILES CONFIGURE_DEPENDS ${dll_src}) 
FILE(GLOB Plugin_Runtime_Debug_Resources_FILES CONFIGURE_DEPENDS ${dll_src}) 
FILE(GLOB Plugin_Runtime_Release_Resources_FILES CONFIGURE_DEPENDS ${dll_src}) 
add_custom_target(CopyRuntimeFiles  ALL 
  VERBATIM 
  COMMAND_EXPAND_LISTS 
  COMMAND ${CMAKE_COMMAND} -E 
  make_directory "${PROJECT_BINARY_DIR}/$<$<CONFIG:Release>:Release>$<$<CONFIG:Debug>:.//>/" 
  COMMAND ${CMAKE_COMMAND} -E 
  copy_if_different  
  "$<$<CONFIG:Release>:${Plugin_Runtime_Release_DLL_FILES}>"  
  "$<$<CONFIG:Debug>:${Plugin_Runtime_Debug_DLL_FILES}>" 
  "${PROJECT_BINARY_DIR}/"   
  COMMAND ${CMAKE_COMMAND} -E 
  make_directory "${PROJECT_BINARY_DIR}/" 
  COMMAND ${CMAKE_COMMAND} -E 
  copy_if_different  
  "$<$<CONFIG:Release>:${Plugin_Runtime_Release_Resources_FILES}>"  
  "$<$<CONFIG:Debug>:${Plugin_Runtime_Debug_Resources_FILES}>" 
  "${PROJECT_BINARY_DIR}/")
 

总结,其实包含include和lib的方式和VS2019 sln方式编译的差不多,只是写入的地方不同。

困扰许久的是如何配置dll的路径,许多文章都没写,最粗暴的方式就是手动复制到exe的所在的目录。

想了想这种不太方便,所以用了cmake的复制文件的方法,动态复制到运行目录

参考链接:

CMake 复制文件方法_taosimin87的博客-CSDN博客_cmake 拷贝文件

猜你喜欢

转载自blog.csdn.net/zanglengyu/article/details/125526447
今日推荐