使用 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 $@
我需要使用不同的编译标志创建同一个库(.a 和 .so 文件)的 2 个不同版本。 例如, 应仅在其中一个构建中启用以下调试标志:
#ifdef ENABLE_NEW_FEATURE
//some code
#endif
正在从具有许多可执行文件的外部项目调用 lib Makefile,其中一些需要具有新功能,而另一些则不需要。
我想知道在 运行 make -j
.
通常的方法是为对象使用多个目录。然后你可以使用类似的东西:
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 $@