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的复制文件的方法,动态复制到运行目录
参考链接: