如何使用 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++) 仅将一些文件链接到对象?的主要内容,如果未能解决你的问题,请参考以下文章

Makefile入门(八):make运行

1-Makefile简介

如何仅将表结构从 csv 文件导入 Access

如何使用 Next.js 仅将一些页面包装在 Context Provider 中?

如何强制 Netbeans 仅使用 -ggdb 编译标志而不使用它也自动发出 Makefile-Debug.mk 中的 -g 标志

如何写 makefile