【问题标题】:Compiling with cmake and include debug information使用 cmake 编译并包含调试信息
【发布时间】:2011-12-09 10:13:44
【问题描述】:

cmake 2.8.5 版

我正在尝试使用 cmake 编译我的项目。但是,当我编译时,我认为我不包括调试 cflag,即 -ggdb -D_DEBUG。当我尝试调试时,没有调试信息。

CMakeLists.txt 文件是否有任何问题。我有3个

# Mimimum version of cmake required
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

# Name of project
PROJECT(sdp_creator C)

# Check for correct compiler
# Using C compiler GNUCXX for c++ compiler
IF(CMAKE_COMPILER_IS_GNUCC)
  MESSAGE(STATUS "=== GCC C COMPILER DETECTED")
  SET(CMAKE_C_FLAGS "-m32 -ggdb -D_DEBUG -Wextra -Wall -Wunreachable-code -O0 -D_LARGEFILE64_SOURCE")
ENDIF(CMAKE_COMPILER_IS_GNUCC)

# Using windows compiler i.e. msvc++
IF(WIN32)
  MESSAGE(STATUS "=== MSVC COMPILER DETECTED")
ENDIF(WIN32)

# Location of directory where include files are kept
INCLUDE_DIRECTORIES($ENV{HOME}/projects/sdp_creator/src/sdp)
INCLUDE_DIRECTORIES($ENV{HOME}/projects/sdp_creator/src/apr/inc)

# Location of directory where libraries are kept
LINK_DIRECTORIES($ENV{HOME}/projects/sdp_creator/src/apr/lib)

# Add subdirectories
ADD_SUBDIRECTORY(driver)
ADD_SUBDIRECTORY(sdp)

构建共享库:

# Create a shared library called libsdp from sdp.c
# NOTE: static is the default
# NOTE: the lib prefix is automatically added
ADD_LIBRARY(sdp SHARED sdp.c)

创建可执行文件:

# Add executable called sdp_creator from source file
ADD_EXECUTABLE(sdp_creator main.c)

# Link the sdp library and other libraries with the excutable 
#if using windows compiler add additional windows libraries
IF(WIN32)
  TARGET_LINK_LIBRARIES(sdp_creator libsdp ws2_32)
  MESSAGE(STATUS "=== Linking executable with windows libraries")
ENDIF(WIN32)

# if using gcc compiler
# NOTE: no need to add the -l prefix i.e. -lsdp, no automatically
IF(CMAKE_COMPILER_IS_GNUCC)
  TARGET_LINK_LIBRARIES(sdp_creator sdp apr-1)
  MESSAGE(STATUS "=== Linking executable with posix libraries")
ENDIF(CMAKE_COMPILER_IS_GNUCC)

非常感谢您的建议,

【问题讨论】:

    标签: cmake


    【解决方案1】:

    如果您使用“Unix Makefiles”(或任何基于 Makefile)生成器,请将变量 CMAKE_BUILD_TYPE 设置为“Debug”

    cmake -DCMAKE_BUILD_TYPE=Debug ../src
    

    这将自动为您的编译器添加正确的定义和标志。您不必自己添加任何标志。

    对于多配置生成器(如 Visual Studio 和 Xcode),CMAKE_BUILD_TYPE 会被忽略,因为构建 Debug 或 Release 配置的选择由开发人员在构建时决定,并且在 CMake 中不知道配置时间。

    【讨论】:

    • 这对于应该是非常常见的操作来说是非常尴尬的。
    • 它也会在关闭优化的情况下构建,这可能不是你想要的。
    • @BarryKelly cmake 是一个构建系统生成器,而不是一个构建系统...cmake -S . -B debug -DCMAKE_BUILD_TYPE=Debug 是您只能在本地特定项目上运行一次的东西,之后您需要做的就是运行 @ 987654323@,如果你想用调试信息编译发布,那么你只需创建一个具有不同设置的新构建文件夹,而不是修改同一个文件夹,例如cmake -S . -B profile -DCMAKE_BUILD_TYPE=RelWithDebInfo。如果你觉得这很尴尬,那正是因为记住这些琐碎的台词并不常见。
    【解决方案2】:

    您可以通过设置VERBOSE=1 来检查make 中使用的确切步骤。这将告诉您是否包含标志。

    cmake project_dir
    make VERBOSE=1
    

    您还可以检查 CMakeCache.txt 以查看分配给 CMAKE_C_FLAGS 变量的值。

    【讨论】:

      【解决方案3】:

      您可以将 CMAKE_C_FLAGS 和 CMAKE_CXX_FLAGS 标志与 -g0/1/2 一起使用(编译器的调试信息标志。-g2 是最高信息):

      cmake ... -DCMAKE_C_FLAGS="-g2" -DCMAKE_CXX_FLAGS="-g2" ...
      

      【讨论】:

        【解决方案4】:

        另一个选择,如果使用unix Makefiles来构建项目,直接在CMakeLists.txt文件中设置CMAKE_BUILD_TYPE:
        set(CMAKE_BUILD_TYPE Debug)

        您可以在
        $ man cmakevars
        找到更多信息 寻找 CMAKE_BUILD_TYPE

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-03-14
          • 2019-11-08
          • 1970-01-01
          • 2017-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多