GNU Make分出一些cpp并以不同的方式编译它

时间:2016-11-01 22:38:06

标签: c++ makefile gnu-make

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

处理

我们如何分离这些构建目标?

1 个答案:

答案 0 :(得分:2)

完全解释了特定于目标的变量in the GNU make documentation,您应该参考这些变量以获取更多信息。在Makefile

mycpp.o: VARIABLE=X

这仅在单个目标的范围内设置变量。使用此功能,您可以在仅构建特定目标时覆盖CPPFLAGS或任何其他变量。

最后,对于不仅需要覆盖变量的情况,您始终可以指定显式规则:

mycpp.o: ./src/mycpp.cpp
    [ build instructions ]

将覆盖从.o构建.cpp的默认规则。