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

Creating 2 versions of same lib using GNU make

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

#ifdef ENABLE_NEW_FEATURE
//some code
#endif

正在从具有许多可执行文件的外部项目调用 lib Makefile,其中一些需要具有新功能,而另一些则不需要。 我想知道在 运行 make -j.

的情况下如何使用 Makefile 创建同一个库的 2 个不同版本而不会出现竞争条件

通常的方法是为对象使用多个目录。然后你可以使用类似的东西:

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 $@