我需要两次构建相同的源树,
1 -正常CFLAGS建项目二进制
2 -用CFLAGS加上-fPIC建立一个静态库,这将是某种形式的SDK来开发项目动态模块.
只使用一个Makefile,完成此任务的最佳方法是什么?
做某种事情会很好:
all: $(OBJECTS)
lib_rule: $(OBJECTS)
CFLAGS += -fPIC
.cpp.o:
$(CC) -c $< -o $@ $(CFLAGS)
Run Code Online (Sandbox Code Playgroud)
但显然它无法完成.
谢谢
R S*_*hko 12
我过去使用的一件事是不同的扩展:
.cpp.o:
$(CC) -c $< -o $@ $(CFLAGS)
.cpp.lo:
$(CC) -c $< -o $@ $(CFLAGS) $(EXTRA_CFLAGS)
Run Code Online (Sandbox Code Playgroud)
然后,您可以从.lo文件构建静态库,并从.o文件构建二进制文件:
prog: a.o b.o
libsdk.a: a.lo b.lo
Run Code Online (Sandbox Code Playgroud)
假设您使用的是GNU Make,您可以使用一些内置函数来只维护一次对象列表:
OBJS = a.o b.o
LOBJS = $(patsubst %.o, %.lo, $(OBJS))
Run Code Online (Sandbox Code Playgroud)
GNU make还提供"特定于目标的变量值".考虑以下Makefile:
# Makefile
CFLAGS := My Cflags
all: $(OBJECTS)
@echo "$@ CFLAGS is: " $(CFLAGS)
lib_rule: CFLAGS += extended by -fPIC
lib_rule: $(OBJECTS)
@echo "$@ CFLAGS is: " $(CFLAGS)
# Makefile - end.
Run Code Online (Sandbox Code Playgroud)
$ make所有
CFLAGS是:我的Cflags
$ make lib_rule
lib_rule CFLAGS是:我的Cflags扩展了-fPIC
$
(请注意:如果您复制并粘贴示例,请记住在命令行前重新添加tabstops.我总是被那个抓住了.)