CMakeLists.txt
make_minimum_required(VERSION 3.18)
set(PNAME yourProjectName)
project(${PNAME})
set(CMAKE_CXX_STANDARD 14)
set(JSON_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rdPart/jsoncpp)
include(${CMAKE_CURRENT_SOURCE_DIR}/3rdPart/opencv/OpenCVConfig.cmake)
file(GLOB src src/*.cpp src/*.c)
file(GLOB head src/*.h src/*.hpp)
set(dshowdir ${CMAKE_CURRENT_SOURCE_DIR}/3rdPart/directshow)
file(GLOB dshow_src ${dshowdir}/src/*.cpp)
file(GLOB dshow_head ${dshowdir}/src/*.h)
source_group("dshow" FILES ${dshow_src} ${dshow_head})
file(GLOB json_src ${JSON_DIR}/*cpp)
file(GLOB json_head ${JSON_DIR}/json/*.h)
source_group("JSON" FILES ${json_head} ${json_src})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/3rdPart/directshow/include
${JSON_DIR}
${dshowdir}/src
${dshowdir}/include
)
add_library(${PNAME} SHARED ${src} ${head} ${json_head} ${json_src} ${dshow_src})
set_target_properties(${PNAME} PROPERTIES COMPILE_FLAGS -DEBG_EXPORT_API_DLL)
target_link_libraries(${PNAME} ${OpenCV_LIBS} ${OpenCV_LIB_DIR})
target_include_directories(${PNAME} PUBLIC ${OpenCV_INCLUDE_DIRS})
add_custom_command(TARGET ${PNAME}
POST_BUILD
COMMAND "${CMAKE_SOURCE_DIR}/scripts/post-build.bat"
${CMAKE_SOURCE_DIR}/src/EBG_dll.h
${CMAKE_SOURCE_DIR}/Megvii_${PNAME}
)
add_custom_command(TARGET ${PNAME}
POST_BUILD
COMMAND "${CMAKE_SOURCE_DIR}/scripts/post-build.bat"
${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${PNAME}.dll
${CMAKE_SOURCE_DIR}/Megvii_${PNAME}
VERBATIM)
option(BuildTest "build test" ON)
if (BuildTest)
set(TestTool "TestTool")
file(GLOB test_src test/*.cpp test/*.c)
file(GLOB test_head test/*.h test/*.hpp)
add_executable(${TestTool} ${test_src} ${test_head} )
target_include_directories(${TestTool} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
target_link_libraries(${TestTool} ${PNAME})
target_link_libraries(${TestTool} debug ${CMAKE_BINARY_DIR}/Debug/${PNAME}.lib optimized ${CMAKE_BINARY_DIR}/Release/${PNAME}.lib)
set(pro_dir ${CMAKE_SOURCE_DIR}/build)
add_custom_command(TARGET ${TestTool}
POST_BUILD
COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/scripts/post-build.bat"
${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/TestTool.exe
${CMAKE_CURRENT_SOURCE_DIR}/Megvii_${PNAME}
VERBATIM )
set_target_properties(${TestTool} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/Megvii_${PNAME}")
set_target_properties(${TestTool} PROPERTIES VS_DEBUGGER_COMMAND "${CMAKE_SOURCE_DIR}/Megvii_${PNAME}/TestTool.exe")
endif()
post-build.bat 实现文件的拷贝
set f=%1%
set f=%f:/=\%
set t=%2%
set t=%t:/=\%
set orgdir=%cd%
pushd %~dp0
copy "%f%" "%t%"
set r=%errorlevel%
if not %r% == 0 (
cd %orgdir%
exit %r%
)
popd