Makefile 使用GNU make创建相同库的两个版本

Makefile 使用GNU make创建相同库的两个版本,makefile,gnu-make,Makefile,Gnu Make,我需要使用不同的编译标志创建相同库(.a&.so文件)的两个不同版本。 例如, 应仅在其中一个生成中启用以下调试标志: #ifdef ENABLE_NEW_FEATURE //some code #endif lib Makefile是从项目外部调用的,其中有许多可执行文件,其中一些需要新特性,而另一些则不需要。 我想知道在运行make-j的情况下,如何使用Makefile创建同一个lib的两个不同版本而不受竞争条件的影响。通常的方法是为对象使用多个目录。然后,您可以使用以下内容: SOURC

我需要使用不同的编译标志创建相同库(.a&.so文件)的两个不同版本。 例如, 应仅在其中一个生成中启用以下调试标志:

#ifdef ENABLE_NEW_FEATURE
//some code
#endif
lib Makefile是从项目外部调用的,其中有许多可执行文件,其中一些需要新特性,而另一些则不需要。
我想知道在运行
make-j

的情况下,如何使用Makefile创建同一个lib的两个不同版本而不受竞争条件的影响。通常的方法是为对象使用多个目录。然后,您可以使用以下内容:

SOURCES=f1.cpp f2.cpp

all: libmylib-d.a libmylib-o.so

libmylib-d.a: CFLAGS=-Dd
libmylib-d.a: $(SOURCES:%.cpp=obj-d/%.o)
    ar -cru $@ $^

libmylib-o.so: CFLAGS=-Do -fPIC
libmylib-o.so: $(SOURCES:%.cpp=obj-o/%.o)
    g++ -shared -o $@ $^

obj-d/%.o: %.cpp | obj-d
    $(CXX) $(CFLAGS) -c -o $@ $<

obj-o/%.o: %.cpp | obj-o
    $(CXX) $(CFLAGS) -c -o $@ $<

obj-o obj-d:
    mkdir $@
SOURCES=f1.cpp f2.cpp
全部:libmylib-d.a libmylib-o.so
libmylib-d.a:CFLAGS=-Dd
libmylib-d.a:$(来源:%.cpp=obj-d/%.o)
ar-cru$@$^
libmylib-o.so:CFLAGS=-Do-fPIC
libmylib-o.so:$(来源:%.cpp=obj-o/%.o)
g++-shared-o$@$^
obj-d/%.o:%.cpp | obj-d
$(CXX)$(CFLAGS)-c-o$@$<
obj-o/%.o:%.cpp | obj-o
$(CXX)$(CFLAGS)-c-o$@$<
obj-o obj-d:
mkdir$@

通常的方法是将使用每组标志编译的输出写入不同的目录,这样它们就不会相互干扰。那么并行运行构建就没有问题了。