我想要通用的Makefile。
ifeq ($(OS),Windows_NT)
test.exe: test.cpp dog.o
g++ test.cpp dog -lws2_32 -o test.exe
else
test: test.cpp dog.o
g++ test.cpp dog -o main
dog.o: dog.cpp dog.h
g++ -c dog.cpp
这给了我:
Makefile:5: *** recipe commences before first target. Stop.
有人可以帮我创造那个吗?
您在该Makefile中有2个错误:
Makefile:5: *** recipe commences before first target. Stop.
规则需要从第一列开始,因此请不要使test.ext
/ test
行缩进。
留下的修复:
Makefile:10: *** missing 'endif'. Stop.
ifeq
需要一个endif
。参见下面的主要工作版本。
ifeq ($(OS),Windows_NT)
test.exe: test.cpp dog.o
g++ test.cpp dog -lws2_32 -o test.exe
else
test: test.cpp dog.o
g++ test.cpp dog -o main
endif
dog.o: dog.cpp dog.h
g++ -c dog.cpp
ifeq
在make文件被“执行”之前由make处理。它有点像c中的预处理器。因此ifeq
和else
之间的所有内容(以及缺少的endif
)都将被原样复制到“后处理”的Makefile中。
ifeq ($(OS),Windows_NT)
<no tab here>test.exe: test.cpp dog.o
<tab here>g++ test.cpp dog -lws2_32 -o test.exe
else
<no tab here>test: test.cpp dog.o
<tab here>g++ test.cpp dog -o main
endif
dog.o: dog.cpp dog.h
g++ -c dog.cpp