[英]How to use a variable from a Makefile in #ifdef in C++ file
生成文件
ifeq ($(wifiSim),1)
WIFISIM :=1
endif
all: test.cpp
test.cpp : test.o
./a.out
test.o :
c++ test.cpp
测试.cpp
#include <iostream>
using namespace std;
int main()
{
#ifdef WIFISIM
cout << "Inside wifisim = 1" << endl;
#else
cout << "Outside wifisim = 1" << endl;
#endif
return 0;
}
我想在WIFISIM
中使用test.cpp
。 我正在运行make wifiSim=1 all
但是 else 正在test.cpp
中执行
有什么方法可以在不改变test.cpp
编译方式的情况下做到这一点,因为我需要在许多文件中使用这个标志 WIFISIM 并且我不想改变它们的编译方式.
你可以做这样的事情
ifeq ($(wifiSim),1)
WIFISIM := -DWIFISIM
endif
all: test.cpp
test.cpp : test.o
./a.out
test.o :
c++ $(WIFISIM) test.cpp
“有什么办法可以在不改变“test.cpp”的编译方式的情况下做到这一点,因为我需要在许多文件中使用这个标志WIFISIM,我不想改变它们的编译方式正在完成。”
不,如果不更改规则中的编译器调用操作,就没有办法。
您应该更改编写 makefile 的策略。 make
实际上支持如何从.cpp
创建.o
文件的隐式规则,并使用如下所示的操作
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c
因此,您可以有条件地将-DWIFISIM
添加到$(CPPFLAGS)
或$(CXXFLAGS)
变量中,它将应用于所有编译的.cpp
文件。
使用隐式规则的示例:
ifeq ($(wifiSim),1)
CXXFLAGS += -DWIFISIM
endif
SRC_FILES := test.cpp abc.cpp yxz.cpp
OBJ_FILES := $(patsubst %.cpp,%.o,$(SRC_FILES))
all: test
test: $(OBJ_FILES)
如果您使用 GCC,您可以使用选项-DWIFISIM
作为传递给 GCC/G++ 的选项。 其他编译器也有类似的选项,例如 Microsoft Visual Studio 中的/D
:
CXXFLAGS =
ifeq ($(wifiSim),1)
CXXFLAGS += -DWIFISIM
endif
all: test.cpp
test.cpp : test.o
./a.out
test.o :
c++ $(CXXFLAGS) test.cpp
结果:
$ make -n wifiSim=1
c++ -DWIFISIM test.cpp
./a.out
$ make -n
c++ test.cpp
./a.out
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.