在C中获取构建的参数

时间:2014-12-23 08:40:32

标签: c gcc compilation c-preprocessor

有没有办法检查用于编译的参数?

像:

  

gcc -std = c99 -ggdb3 source.c -o sate-enak

source.c

...
#ifdef (-ggdb3 variable is defined)
    do_some_function();
#else
    do_another_function();
#endif
...

使用这种方法,我可以看出该程序是为生产还是产品编译的。

2 个答案:

答案 0 :(得分:3)

使用gcc,据我所知,但您可以通过宏实现相同的目标:

在Makefile中:

CFLAGS_DEBUG = -ggdb3 -DDEBUG 
CFLAGS = -std=c99 $(CFLAGS_DEBUG)

然后在你的程序中:

#ifdef DEBUG     
    do_some_function();
#else
    do_another_function();
#endif

答案 1 :(得分:3)

找不到编译器使用的选项并不容易。除此之外,大多数程序都是从许多源文件构建的,而这些源文件可能是用不同的选项集编译的。

通常,如果您想知道,可以使用命令行#define控制它:

gcc -DMODE=MODE_OPTIM -O3 …
gcc -DMODE=MODE_DEBUG -ggdb3 …

您有一个标题,用于定义MODE_OPTIMMODE_DEBUG的含义:

enum CompilationMode { MODE_OPTIM, MODE_DEBUG };

#ifndef MODE
#define MODE MODE_DEBUG
#endif

extern enum CompilationMode compiled_for;

在某处您可以定义:

enum CompilationMode compiled_for = MODE;

然后,您可以在需要知道程序构建方式的地方测试compiled_for

实际上,这是运行时决策。对于编译时决策,您将enum替换为:

#define MODE_OPTIM 0
#define MODE_DEBUG 1

你可以测试:

#if MODE == MODE_DEBUG
    do_some_function();
#else
    do_another_function();
#endif