jiegemena Blog

哪些事情,我相信!

cmake使用

例子

# CMake 最低版本号要求
cmake_minimum_required (VERSION 3.16)

# 项目信息
project (test_opencv)


set(ROOTHOMEPATH ${PROJECT_SOURCE_DIR})
set(HOMEROOT ${PROJECT_SOURCE_DIR})

set(BUILDENV "VSCODE")

# 设置目录输出
if(BUILDENV STREQUAL "VSCODE")
SET(EXECUTABLE_OUTPUT_PATH "${HOMEROOT}/build/bin/${PROJECT_NAME}/${CMAKE_BUILD_TYPE}") 
set(EXEPATH "${EXECUTABLE_OUTPUT_PATH}")
else()
SET(EXECUTABLE_OUTPUT_PATH "${HOMEROOT}/build/x64") 
set(EXEPATH "${EXECUTABLE_OUTPUT_PATH}/${CMAKE_BUILD_TYPE}")
endif()


include_directories("D:\\cxxlib\\opencv\\build\\include")
link_directories("D:\\cxxlib\\opencv\\build\\x64\\vc14\\lib")

if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
add_compile_options(/utf-8)
endif()

FILE (GLOB DIRSRCS "./src/*")

SET (ALL_SRCS 
	 ${DIRSRCS}
)

# Add block directories
add_executable(${PROJECT_NAME} ${ALL_SRCS})

target_link_libraries(${PROJECT_NAME} PRIVATE opencv_world440d.lib)
file(COPY D:/cxxlib/opencv/build/x64/vc14/bin/opencv_world440d.dll DESTINATION ${EXEPATH})

设置Visual Studio解决方案文件的筛选器

FILE (GLOB MAIN_Src "./*.cpp" "./*.hpp"  "./*.h" "./*.ui")
FILE (GLOB CaptureView_SRC "CaptureView/*")
FILE (GLOB NowSettings_SRC "NowSettings/*")
FILE (GLOB OutLineView "./OutLineView/*")
FILE (GLOB HeightView "./HeightView/*")
FILE (GLOB ImgPixViews "./ImgPixViews/*")
FILE (GLOB toolssrc "./pcltools/*")
FILE (GLOB ConnectSet_Src "./ConnectSet/*")
FILE (GLOB EncoderSupper_Src "./EncoderSupperDialog/*")
FILE (GLOB SupperSettings_Src "./SupperSettings/*")
FILE (GLOB about_Src "./about/*")
# FILE (GLOB Observer_Src "./Observer/*" )

# 设置Visual Studio解决方案文件的筛选器
source_group("main_src" FILES ${MAIN_Src})
source_group("outlinview_src" FILES ${OutLineView})
source_group("heightview_src" FILES ${HeightView})
source_group("imgpixview_src" FILES ${ImgPixViews})
source_group("nowsettings_src" FILES ${NowSettings_SRC})
source_group("connectset_src" FILES ${ConnectSet_Src})
source_group("captureview_src" FILES ${CaptureView_SRC})
source_group("pcltools_src" FILES ${toolssrc})
source_group("encodersupper_src" FILES ${EncoderSupper_Src})
source_group("suppersettings_src" FILES ${SupperSettings_Src})
source_group("about_Src" FILES ${about_Src})

多项目

# CMake 最低版本号要求
cmake_minimum_required (VERSION 3.2)

# 项目信息
project (GLNavigatorPro_newmath)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
message("----start------")
message("${CMAKE_CXX_COMPILER_ID}")

add_compile_definitions(WIN32_LEAN_AND_MEAN)
# set(Qt5_DIR "D:\\Qt\\Qt5.9.9\\5.9.9\\msvc2017_64\\lib\\cmake\\Qt5")
# set(OpenCV_DIR "D:/usr/vcpkg/installed/x64-windows/share/opencv4")
 
if (NOT DEFINED Qt5_DIR)
  message(FATAL_ERROR "Qt5_DIR no found")
endif()



set(Qt5_RootPath "${Qt5_DIR}/../../../")

if (NOT CMAKE_BUILD_TYPE)
   set (CMAKE_BUILD_TYPE "Debug")
   message (
      STATUS "No CMAKE_BUILD_TYPE selected, defaulting to ${CMAKE_BUILD_TYPE}"
   )
endif ()

if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
add_compile_options(/utf-8)


set(OpenCV_DIR "D:\\cxxlib\\opencv\\build\\x64\\vc14\\lib")
set(OpenCV_INCLUDE_DIRS "D:\\cxxlib\\opencv\\build\\include")

# release 生成 pdb
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF")

endif()

set(ROOTHOMEPATH ${PROJECT_SOURCE_DIR})
set(HOMEROOT ${PROJECT_SOURCE_DIR})

# qt使用,指定CMake是否将自动处理Qt uic moc rcc 代码生成器
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

message("-----------start-------")

message("${EXECUTABLE_OUTPUT_PATH}")
message("${CMAKE_BINARY_DIR}")
message("${CMAKE_CACHEFILE_DIR}")
message("-----------end-------")


# set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_BUILD_TYPE "Release")


set(BUILDENV "VS")

message("${CMAKE_BUILD_TYPE}")

add_subdirectory(src/tools)
add_subdirectory(src/gl_linelaser_sdk)
add_subdirectory(src/gl_linelaser_calibration)
add_subdirectory(src/qtclient)
add_subdirectory(src/test)
add_subdirectory(src/gl_test_encode)

复制文件

message(${EXEPATH})
file(COPY "${Qt5_RootPath}/bin/Qt5Core.dll" DESTINATION ${EXEPATH})
file(COPY "${Qt5_RootPath}/bin/Qt5Gui.dll" DESTINATION ${EXEPATH})
file(COPY "${Qt5_RootPath}/bin/Qt5Widgets.dll" DESTINATION ${EXEPATH})
file(COPY "${Qt5_RootPath}/bin/Qt5Network.dll" DESTINATION ${EXEPATH})
file(COPY "${Qt5_RootPath}/bin/Qt5SerialPort.dll" DESTINATION ${EXEPATH})
file(COPY "${Qt5_RootPath}/bin/Qt5PrintSupport.dll" DESTINATION ${EXEPATH})
file(COPY "${Qt5_RootPath}/bin/Qt5Charts.dll" DESTINATION ${EXEPATH})

file(GLOB platformsFiles  "${Qt5_RootPath}/plugins/platforms/*")
file(COPY ${platformsFiles} DESTINATION ${EXEPATH}/platforms/)

file(GLOB imageformats  "${Qt5_RootPath}/plugins/imageformats/*")
file(COPY ${imageformats} DESTINATION ${EXEPATH}/imageformats/)

file(GLOB vtkpcl  "D:/codehome/gzvs/LaserLine/GLNavigator/libs/pcl_vtk/release/*")
file(COPY ${vtkpcl} DESTINATION ${EXEPATH})

# file(COPY D:/cxxlib/gllasersdk/lasersdk/x64/lasersdk.dll DESTINATION ${EXEPATH})
file(COPY D:/cxxlib/opencv/build/x64/vc14/bin/opencv_world440.dll DESTINATION ${EXEPATH})