如何使用 Makefile (g++) 仅将一些文件链接到对象?
Posted
技术标签:
【中文标题】如何使用 Makefile (g++) 仅将一些文件链接到对象?【英文标题】:How to link only some files to objects with Makefile (g++)? 【发布时间】:2014-08-02 02:10:58 【问题描述】:我有一个将源代码编译为目标文件的 Makefile,它可以工作:
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
g++ $(FLAGS) $(INCLUDES) -c -o $@ $<
但它包括我的 src 目录中的所有文件。假设我有一些文件(例如“x.cpp”)不希望作为编译的一部分。我想手动指定一些文件来编译成对象。例如,
SRC = src/one.cpp src/two.cpp
OBJ = obj/one.o obj/two.o
$(OBJ_DIR)/%.o: $(SRC)
g++ $(FLAGS) $(INCLUDES) -c -o $@ $<
我会得到一个.o,两个.o,但不是 x.o。这有可能吗?
【问题讨论】:
LINKED = ...
之类的东西,错过了x.o
?
【参考方案1】:
定义模块列表,构造你真正想要的对象列表:
MODULES = one two
OBJECTS = $(addprefix $OBJ_DIR/, $(addsuffix .o, $MODULES))
all : $OBJECTS
将规则限制在列表中:
$OBJECTS: $(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
g++ $(FLAGS) $(INCLUDES) -c -o $@ $<
【讨论】:
完美,正是我需要的。谢谢。以上是关于如何使用 Makefile (g++) 仅将一些文件链接到对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Next.js 仅将一些页面包装在 Context Provider 中?
如何强制 Netbeans 仅使用 -ggdb 编译标志而不使用它也自动发出 Makefile-Debug.mk 中的 -g 标志