在CMake工程里我们经常遇到下面集中情况:
- 在Linux C++工程里,当项目依赖三方库的情况下发布软件时候需要连通三方库的so文件一起发布。
find_package(OpenCV REQUIRED COMPONENTS core imgproc imgcodecs)
target_link_libraries(${PROJECT_NAME} PUBLIC ${OpenCV_LIBS})
install(
FILES
$<TARGET_SONAME_FILE:opencv_core>
$<TARGET_SONAME_FILE:opencv_imgproc>
$<TARGET_SONAME_FILE:opencv_highgui>
$<TARGET_SONAME_FILE:opencv_imgcodecs>
DESTINATION
lib
)
需要注意的是Linux系统下用:通过TARGET_SONAME_FILE找so相关文件。
- 在Window C++工程里当项目依赖三方库的情况下运行exe需要三方库dll一同在bin目录下,否则会提示xxx.dll找不到。
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_FILE:opencv_core> $<TARGET_FILE_DIR:${PROJECT_NAME}>
$<TARGET_FILE:opencv_imgproc> $<TARGET_FILE_DIR:${PROJECT_NAME}>
$<TARGET_FILE:opencv_highgui> $<TARGET_FILE_DIR:${PROJECT_NAME}>
$<TARGET_FILE:opencv_imgcodecs> $<TARGET_FILE_DIR:${PROJECT_NAME}>
)
当然发布软件时候也一并需要把dll发布出去:
install(
FILES
$<TARGET_FILE:opencv_core>
$<TARGET_FILE:opencv_imgproc>
$<TARGET_FILE:opencv_highgui>
$<TARGET_FILE:opencv_imgcodecs>
DESTINATION
bin
)
需要注意的是Windows系统下用:通过TARGET_FILE找dll相关文件。
网友评论