cmake 使用(七)

本文是 cmake 使用的第八篇,主要介绍如何设置编译标志,以便于在代码中使用预编译宏。

上一篇的链接为:https://blog.csdn.net/QCZL_CC/article/details/119825969

目录结构如下:

06-compile-flags/
├── CMakeLists.txt
└── main.c

其中 main.c 内容如下:

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    printf("Hello cmake ! test compile flags\n");
#ifdef DEBUG_TEST
    printf("this is a test line...\n");
#endif
    return 0;
}

可以看到代码中判断了 DEBUG_TEST 宏。如果编译代码时没有指定 DEBUG_TEST 宏,则其包裹的代码不会被编译和执行。

CMakeLists.txt 规则如下:

cmake_minimum_required(VERSION 3.5)


# CMake 支持以多种不同方式设置编译标志:
# 1: 使用 target_compile_definitions() 函数设置
# 2: 使用 CMAKE_C_FLAGS 和 CMAKE_CXX_FLAGS 变量
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DEX2" CACHE STRING "Set C Compiler Flags" FORCE)

project (compile_flags)

add_executable(cmake_examples_compile_flags main.c)

# 在现代 CMake 中设置 C++ 标志的推荐方法是使用每个目标标志,这些标志可以通过 target_compile_definitions() 函数填充到其他目标
# 这将填充库的 INTERFACE_COMPILE_DEFINITIONS 并根据范围将定义推送到链接目标
arget_compile_definitions(cmake_examples_compile_flags
   PRIVATE DEBUG_TEST
)

上面的规则中使用了2种方式设置编译标志分别设置了 EX2 和 DEBUG_TEST 2个标志。

        1、使用 cmake 变量 CMAKE_C_FLAGS

        2、使用 target_compile_definitions 函数

编译日志如下:

可以看到编译时添加了2个标志: /usr/bin/cc -DDEBUG_TEST  -DEX2

代码运行结果如下:

可以看到被 DEBUG_TEST 宏包裹的这部分代码被编译了,并且可以正常执行到。

下面我们改变 CMakeLists.txt 内容,注释掉设置 DEBUG_TEST 标志的部分,更改后规则如下:

cmake_minimum_required(VERSION 3.5)


# CMake 支持以多种不同方式设置编译标志:
# 1: 使用 target_compile_definitions() 函数设置
# 2: 使用 CMAKE_C_FLAGS 和 CMAKE_CXX_FLAGS 变量
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DEX2" CACHE STRING "Set C Compiler Flags" FORCE)

project (compile_flags)

add_executable(cmake_examples_compile_flags main.c)

# 在现代 CMake 中设置 C++ 标志的推荐方法是使用每个目标标志,这些标志可以通过 target_compile_definitions() 函数填充到其他目标
# 这将填充库的 INTERFACE_COMPILE_DEFINITIONS 并根据范围将定义推送到链接目标
#arget_compile_definitions(cmake_examples_compile_flags
#   PRIVATE DEBUG_TEST
#)

更改后再执行编译过程,可以发下编译时没有添加 DEBUG_TEST 标志

然后我们执行代码,发现 DEBUG_TEST 包裹部分的代码并没有执行

下一篇:https://blog.csdn.net/QCZL_CC/article/details/119827150,主要介绍如何使用 cmake 导入已经编译好的第三方库。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CMake种常见的变量类型,包括: 1. 提供信息的变量:这些变量提供了有关系统和构建过程的信息,例如CMAKE_VERSION用于指示CMake的版本号。 2. 控制变量:这些变量用于控制构建过程的行为,例如CMAKE_BUILD_TYPE用于指定构建类型(例如Debug或Release)。 3. 描述系统的变量:这些变量描述了系统的各种属性,例如CMAKE_SYSTEM_NAME用于指定目标系统的名称(例如Windows或Linux)。 4. 控制构建过程的变量:这些变量用于控制构建过程的各个方面,例如CMAKE_MODULE_PATH用于指定CMake模块的搜索路径。 5. 语言变量:这些变量用于描述编程语言的相关属性,例如CMAKE_C_FLAGS用于指定C语言编译器的编译选项。 6. CTest变量:这些变量用于配置CTest测试框架的行为,例如CTEST_CONFIGURATION_TYPE用于指定测试配置类型。 7. CPack变量:这些变量用于配置CPack打包工具的行为,例如CPACK_GENERATOR用于指定打包生成器。 引用提供了这种变量的详细列表,而引用则提供了引用这些变量的方式。对于变量引用,可以使用${}进行引用,除了在IF等语句中,可以直接使用变量名而不需要${}。引用提供了一些关于CMake常见变量的参考资料。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [C++:CMake常用变量【CMAKE_CXX_FLAGSCMAKE_BUILD_TYPE、×_BINARY_DIR】](https://blog.csdn.net/u013250861/article/details/127935342)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值