CMake实际项目使用方式

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

猜你喜欢

转载自blog.csdn.net/idream68/article/details/117568634