这一节讲一下如何传递宏定义,我们通过一个小的例子来说明:
#include<iostream>
#ifndef TEST_DATA
#define TEST_DATA 1
#endif
int main() {
std::cout << "x is " << TEST_DATA << std::endl;
return 0;
}
g++传递宏定义
g++在编译时,我们通过-D XXXX的方式来传递宏定义XXXX,并且传递的宏定义是全局的(文件中的宏定义作用域范围为其定义之后的部分,之前不会生效),如果此时在其他文件也有宏定义那么编译器会报重复定义的错误,因此我们写成:
#ifndef TEST_DATA
#define TEST_DATA 1
#endif
这样如果不传递的话用文件自带的宏定义,如果传递的话就用传递的,我们在文件里就不再定义了,我们来验证下结果,首先输入编译指令:
g++ macro_test.cc -o macro_test && ./macro_test
运行结果为
x is 1
如果改为
g++ macro_test.cc -o macro_test -D TEST_DATA=2 && ./macro_test
运行结果为
x is 2
Makefile传递宏定义
Makefile通常通过定义变量CFLAGS来传递参数,我们来写一个最简单的:
macro_test:macro_test.cc
g++ ${CFLAGS} macro_test.cc -o macro_test
如果直接make,不输入任何其他参数,那么得到的就是上面第一个结果,如果make指令为
make CFLAGS+=-DTEST_DATA=2
那么得到的就是第二个结果了。