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

标签 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 处理

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

最佳答案

目标特定的变量得到了充分解释 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/

相关文章:

c++ - 将 3x3 矩阵转换为 Euler/Tait Bryan 角(俯仰偏航角)

c - 在Solaris9机器上生成文件错误: Dont know how to make target

mono - 在树莓派上编译 Mono 3.x

python - 将参数从 Python 传递到 makefile

makefile - $(VARIABLE) 和 % 模式规则之间的差异

c++ - 尝试并捕捉 while 循环 : jumps to catch block even after the input is correct only if the first input was incorrect - C++

c++ - emacs:类和结构的不同缩进

makefile - 追加到列表的开头

Makefile 将 child 放在链上

c++ - glGetError 和性能