cmake 使用笔记
一、cmake 构建vs 工程
1. 构建工程命令, 如构建visual studio 2015 x64
- 命令行指定构建类型
进入CMakeLists.txt所在目录,执行命令:
cmake -B build -G "Visual Studio 14 2015 Win64" -DCMAKE_CONFIGURATION_TYPES="Debug;Release"
-DCMAKE_CONFIGURATION_TYPES 是 CMake 中用于指定多配置生成器(如 Visual Studio、Xcode 等)支持的构建类型(如 Debug、Release 等)的关键参数。以下是详细解释和使用指南:
-
-
多配置生成器:
仅对支持多配置的生成器(如Visual Studio、Xcode、Ninja Multi-Config)生效。
允许在构建时通过--config参数选择配置(如Debug或Release)。 -
自定义配置类型:
覆盖默认的配置类型(如Debug;Release;RelWithDebInfo;MinSizeRel),添加或删除特定配置。
-
- CMakeLists.txt中设置支持的构建的类型
CMakeLists.txt中添加:set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Supported build types" FORCE)# 为不同配置设置不同的预处理器定义if(MSVC)target_compile_definitions(example PRIVATE$<$<CONFIG:Debug>:_DEBUG>$<$<CONFIG:Release>:NDEBUG>)endif()命令行进行构建:mkdir buildcd build
#生成解决方案
cmake .. -G "Visual Studio 14 2015" -A x64
#构建Debug版本(如果不使用--config , 默认构建Debug版本)
cmake --build . --config Debug 或者 cmake --build . --config Debug --parallel 8 --target clean
#构建Release版本
cmake --build . --config Release
关键参数说明:
--config:指定构建配置(Debug/Release/RelWithDebInfo等)--parallel:设置并行编译的线程数--target:指定构建特定目标(如clean或all)
2.添加第三方项目
- 如果第三方项目不支持cmake构建,add_custom_command自定义构建
- 如果第三方项目支持cmake构建,通过ExternalProject添加(windows推荐)或者add_subdirectory添加
3.添加需要包含的头文件
- include_directories
- link_directories
- include: 在CMake中用include()加载并执行另一个CMake脚本文件
if(WIN32)
include(cmake/Windows.cmake)
endif()
这里,
cmake/Windows.cmake是专门为Windows平台配置的脚本。当项目在Windows上构建时,这个文件会被包含进来,设置特定的编译器选项、预处理器定义、第三方库的构建等
6. 生成lib
- add_library(): 生成库
add_library(libtest, SHARED *.cpp)
- set_target_properties: 设置属性
set_target_properties(libtest PROPERTIESWINDOWS_EXPORT_ALL_SYMBOLS ON # 强制导出所有符号DEBUG_POSTFIX "d")
- target_link_libraries,如果libtest需要依赖第三方库,添加库依赖
target_link_libraries(libtestdebug yuvd.liboptimized yuv.lib)
- 添加库的构建顺序
add_dependencies(libtestopencvyaml-cppjsoncppturbojpeglibyuv)
- add_executable 生成可执行程序
- target_link_libraries 添加依赖的库
8. 向编译器添加预处理宏定义
- add_definitions
add_definitions(-DWINDOWS-DLIBJPEG_TURBO_DLL)
- add_compile_options
add_compile_options(-g)
浙公网安备 33010602011771号