CC=g++
CFLAGS=-I
GCCCOMPFLAGS=-Wall -Wextra -O -ansi -pedantic -fpic -shared -c
GCCLINKFLAGS=-shared
DEPS = ./src/a.h ./src/b.h
OBJ = a.o b.o
CPPOBJ = mycpp.cpp
%.o: ./src/%.cpp $(DEPS)
$(CC) -DTARGET_OS_LINUX $(GCCCOMPFLAGS) -o $@ $<
final: $(OBJ)
$(CC) -DTARGET_OS_LINUX $(GCCLINKFLAGS) -o ./src/$@.so $^
<newtarget>:
$(CC) -std=gnu++0x ..... -o mycpp.o mycpp.cpp
How to compile mycpp.cpp with different gcc option and add it to "final" linking target
现在我想用不同的GCC选项编译一个新文件“mycpp.cpp”,并将其添加到最终目标以链接在一起。
%.o: ./src/%.cpp $(DEPS)
$(CC) -DTARGET_OS_LINUX $(GCCCOMPFLAGS) -o $@ $<
final: $(OBJ) mycpp.o
$(CC) -DTARGET_OS_LINUX $(GCCLINKFLAGS) -o ./src/$@.so $^
mycpp.o:
compile ...
这将使mycpp被外卡%.o
处理我们如何分离这些构建目标?
答案 0 :(得分:2)
完全解释了特定于目标的变量in the GNU make documentation,您应该参考这些变量以获取更多信息。在Makefile
:
mycpp.o: VARIABLE=X
这仅在单个目标的范围内设置变量。使用此功能,您可以在仅构建特定目标时覆盖CPPFLAGS
或任何其他变量。
最后,对于不仅需要覆盖变量的情况,您始终可以指定显式规则:
mycpp.o: ./src/mycpp.cpp
[ build instructions ]
将覆盖从.o
构建.cpp
的默认规则。