生成文件
ifeq ($(wifiSim),1)
WIFISIM :=1
endif
all: test.cpp
test.cpp : test.o
./a.out
test.o :
c++ test.cpp
TEST.CPP
#include <iostream>
using namespace std;
int main()
{
#ifdef WIFISIM
cout << "Inside wifisim = 1" << endl;
#else
cout << "Outside wifisim = 1" << endl;
#endif
return 0;
}
我想使用&#34; WIFISIM&#34;在test.cpp中。 我正在运行&#34;使wifiSim = 1 all&#34; 但是else正在test.cpp中执行
有没有办法在不对#34; test.cpp&#34;的编译方式做任何改变的情况下做到这一点。已完成,因为我需要在许多文件中使用此标志WIFISIM,我不想改变它们的编译方式。
答案 0 :(得分:7)
你可能会做这样的事情
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
实际上支持implicit rules如何从.o
创建.cpp
文件并使用类似
$(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)
答案 1 :(得分:0)
如果您使用GCC,您可以使用选项:help window-move-cursor
作为传递给GCC / G ++的选项。其他编译器具有类似的选项,例如Microsoft Visual Studio中的-DWIFISIM
:
/D
结果:
CXXFLAGS =
ifeq ($(wifiSim),1)
CXXFLAGS += -DWIFISIM
endif
all: test.cpp
test.cpp : test.o
./a.out
test.o :
c++ $(CXXFLAGS) test.cpp