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 处理
我们如何分离这个构建目标?
最佳答案
目标特定的变量得到了充分解释 in the GNU make documentation ,您应该查阅它以获取更多信息。在 Makefile
中:
mycpp.o: VARIABLE=X
这仅在单个目标范围内设置变量。使用它,您可以仅在构建特定目标时覆盖 CPPFLAGS
或任何其他变量。
最后,对于不止一个变量需要被覆盖的情况,您始终可以指定一个明确的规则:
mycpp.o: ./src/mycpp.cpp
[ build instructions ]
这将覆盖从 .cpp
构建 .o
的默认规则。
关于c++ - GNU Make 分离出一些 cpp 并以不同的方式编译它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40369707/