c - 在 .config 文件中定义预处理器宏

标签 c gcc macros cmake

我正在使用 CMake 用 C 进行编码,我想在单独的文件中定义简单的预处理器宏。这样做的目的是为我的应用程序提供一个主配置文件。

我正在尝试做一些类似于内核 .config 文件的事情,但我没有找到如何将带有定义的文件传递给编译器。我知道 gcc 的选项 -D 可以定义单个宏,但它不接受文件作为输入。我也知道 CMake 的 ADD_DEFINITIONS 实用程序,但它的用法但也预计与一定数量的宏一起使用,而不是与文件一起使用。

总结一下,我想定义一个带有宏定义的文件.config:

CONFIG_MACRO_A=y
CONFIG_MACRO_B=y
# CONFIG_MACRO_C is not set
CONFIG_MACRO_C=y

并在编译时将每一行用作预处理器宏。

非常感谢您的帮助。

最佳答案

我至少看到三种可能性:

  1. 以普通头文件的风格编写配置文件并包含它,即

    #define CONFIG_MACRO_A y
    #define CONFIG_MACRO_B y
    //#define CONFIG_MACRO_C # C is not set
    #define CONFIG_MACRO_D y
    
  2. 按照 @usr1234567 建议使用配置文件机制。

  3. 在编译器调用中(即在 makefile 中)使用 shell 处理,例如对于bash:

    gcc $(CFLAGS) `while read mac;  do echo -n "-D$mac "; done < <( grep -v "#" mymacro ) ` $(TARGET)
    

关于c - 在 .config 文件中定义预处理器宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38473253/

相关文章:

c - 注意 : expected ‘float (*)[100]’ but argument is of type ‘float (*)[100][100]’

java - 在 Java 中访问的 C 结构

c - GNU/Linux 替代 Turbo C 函数 `clrscr` 和 `cprintf`

可以指示 GCC 不消除死代码吗?

c - 当我们将 "cc"添加到 clobber 列表时,程序集输出中会发生什么

c - GCC 中奇怪的优化(删除函数)

c - 指针错误: Makes pointer from integer without a cast

c - 如何在c中的字符串宏中传递字符串参数

c++ - C/C++ 中可中断的命名范围

c - _Generic 发出奇怪的 gcc 警告