有没有办法检查用于编译的参数?
像:
gcc -std = c99 -ggdb3 source.c -o sate-enak
在source.c
:
...
#ifdef (-ggdb3 variable is defined)
do_some_function();
#else
do_another_function();
#endif
...
使用这种方法,我可以看出该程序是为生产还是产品编译的。
答案 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_OPTIM
和MODE_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