CMake中的调试与发布

问题描述 投票:346回答:4

在GCC编译的项目中,

  • 如何为每种目标类型(调试/发布)运行CMake?
  • 如何使用CMake指定调试和释放C / C ++标志?
  • 我如何表达主要可执行文件将使用g++和一个嵌套库与gcc编译?
c++ c gcc cmake
4个回答
584
投票

使用CMake,通常建议做一个"out of source" build。在项目的根目录中创建CMakeLists.txt。然后从项目的根目录:

mkdir Release
cd Release
cmake -DCMAKE_BUILD_TYPE=Release ..
make

对于Debug(再次来自项目的根目录):

mkdir Debug
cd Debug
cmake -DCMAKE_BUILD_TYPE=Debug ..
make

Release / Debug将为您的编译器添加适当的标志。还有RelWithDebInfoMinSizeRel构建配置。


您可以通过CMakeLists.txtCMAKE_C_FLAGS_DEBUG变量修改/添加CMAKE_C_FLAGS_RELEASE中的标志,例如:

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall")

有关详细信息,请参阅CMAKE_BUILD_TYPE


至于你的第三个问题,我不确定你究竟在问什么。 CMake应该自动检测并使用适合您不同源文件的编译器。


20
投票

有关调试/释放标志,请参阅CMAKE_BUILD_TYPE变量(将其作为cmake -DCMAKE_BUILD_TYPE=value传递)。它需要像ReleaseDebug等值。

http://cmake.org/Wiki/CMake_Useful_Variables#Compilers_and_Tools

cmake使用扩展名来选择编译器,所以只需命名你的文件.c。

您可以使用各种设置覆盖它:

例如:

set_source_files_properties(yourfile.c LANGUAGE CXX) 

用g ++编译.c文件。上面的链接还说明了如何为C / C ++选择特定的编译器。


11
投票

而不是直接操纵CMAKE_CXX_FLAGS字符串(可以使用string(APPEND CMAKE_CXX_FLAGS_DEBUG " -g3") btw更好地完成),你可以使用add_compiler_options

add_compile_options(
  "-Wall" "-Wpedantic" "-Wextra" "-fexceptions"
  "$<$<CONFIG:DEBUG>:-O0;-g3;-ggdb>"
)

这会将指定的警告添加到所有构建类型,但只会给DEBUG构建的给定调试标志。请注意,编译选项存储为CMake列表,它只是一个用分号;分隔其元素的字符串。


3
投票

// CMakeLists.txt:发布

set(CMAKE_CONFIGURATION_TYPES "Release" CACHE STRING "" FORCE)

// CMakeLists.txt:debug

set(CMAKE_CONFIGURATION_TYPES "Debug" CACHE STRING "" FORCE)

1
投票

如果你想构建一个不同的配置而不重新生成使用你也可以运行cmake --build {$PWD} --config <cfg>对于多配置工具,选择<cfg> ex。 Debug,Release,MinSizeRel,RelWithDebInfo

https://cmake.org/cmake/help/v2.8.11/cmake.html#opt%3a--builddir

© www.soinside.com 2019 - 2024. All rights reserved.