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 StudioXcodeNinja 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 build

cd 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
4. 添加依赖库的目录
  • link_directories
5. 加载另一个cmake脚本
  •  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 PROPERTIES
    WINDOWS_EXPORT_ALL_SYMBOLS ON  # 强制导出所有符号
    DEBUG_POSTFIX "d"
)
  • target_link_libraries,如果libtest需要依赖第三方库,添加库依赖
target_link_libraries(libtest
    debug yuvd.lib
optimized yuv.lib
)
  • 添加库的构建顺序
add_dependencies(libtest
    opencv
    yaml-cpp
    jsoncpp
    turbojpeg
    libyuv
)
7. 生成可执行程序
  • add_executable 生成可执行程序
  • target_link_libraries 添加依赖的库

8. 向编译器添加预处理宏定义

  • add_definitions
add_definitions(
 -DWINDOWS
    -DLIBJPEG_TURBO_DLL
    )
9. 向编译器添加编译选项
  • add_compile_options
add_compile_options(-g)

 

posted on 2025-05-29 18:35  洛苏  阅读(100)  评论(0)    收藏  举报

导航