c++ - CMAKE - 调试/交叉构建?

标签 c++ makefile x86 cmake arm

好的,我正在使用 CMake 在 Linux 下为 ARM 目标构建 C++。我的一个名为 DEBUG 的 .h 文件中有一个#DEFINE。如果设置,我希望将各种跟踪串行的方法添加到构建中。我希望能够通过这样做来做到这一点“make debug”以使用此#DEFINE 集进行构建,并在不设置它的情况下进行正常的“make”构建。这可能吗?

此外,是否可以为 CMake 指定一个目标?因为我现在有 2 个 CMakeLists.txt,一个用于 x86,一个用于 Armel(具有不同的选项,例如在 x86 上使用调试信息构建,与 ARM 相比,ARM 需要一个剥离的、大小优化的二进制文件)。

最佳答案

看来你有两个问题。关于调试,您可以使用 CMAKE_BUILD_TYPE 来分隔调试/发布设置,并使用 $ cmake --build 。 --config Release$ cmake --build 。 --config Debug 编译。

对于第二个,关于交叉构建,这是可能的。你可以这样做:

  1. 根据 this guide分别为arm和x86编写配置文件来设置编译器,归档器等。假设将x86的一个命名为*config_x86.cmake*和*config_arm.cmake* for arm。
  2. 定义一个 cmake 宏,例如 *MY_TARGET*。并在project命令前添加如下代码,

    if (${MY_TARGET} STREQUAL "x86")
        include(config_x86.cmake REQUIRED)
    elseif (${MY_TARGET} STREQUAL "arm")
        include(config_arm.cmake REQUIRED)
    endif ()
    
  3. 然后像这样生成你的项目文件

    $ cmake -DMY_TARGET=x86 "你的代码目录"

关于c++ - CMAKE - 调试/交叉构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7079947/

相关文章:

c++ - C++ Metro App 教程的编译错误 - 任务继续

c++ - 编写 makefile 来构建动态库

c++ - Net-SNMP - 在新的 MIB 模块中编译,而不编译整个 SNMP 代理

assembly - x86 sbb 与第一个和第二个操作数具有相同的寄存器

c - 通过 x86 汇编进行零除检查的 C 除法宏

c++ - 当打开的控制台窗口关闭时,如何防止我的程序关闭?

c++ - 什么是最有效的编译和交互式执行周期的 emacs 工作流程(C++/makefile)

python - 在 Ubuntu 13.04 上编译 MySQL Workbench

c++ - 编辑 C++/汇编调试器的源代码以包含额外的汇编信息?

c++ - #define hell C/C++ 的替代品/工具