【问题标题】:Generate an executable for each .c file in a directory为目录中的每个 .c 文件生成一个可执行文件
【发布时间】:2021-12-30 11:35:44
【问题描述】:

我的项目目录如下所示:

/project
    Makefile
    /src
        main.c
        foo.c
        bar.c
    /exec
        main
        foo
        bar

我希望 Makefile 为 /src 文件夹中的每个 .c 文件生成一个可执行文件,并将可执行文件放入 /exec 文件夹中。

这是我第一次使用 Makefile,我尝试了下面的代码,但它会在 /src 文件夹中生成 exec 文件,我希望它们位于 /exec 文件夹中

CFLAGS := -Wall -g
SRC_DIR := src
EXEC_DIR := exec

SRC_FILES := $(wildcard $(SRC_DIR)/*.c)

all: $(SRC_FILES:.c=)

.c:
    gcc $(CFLAGS) $< -o $(EXEC_DIR)/$@ 

【问题讨论】:

  • 不是生成可执行文件的 gcc 命令:``` gcc file.c -o file ``
  • @Fredrik -o 选项用于指定name of the primary output file。它与生成的输出的类型无关。
  • @G.M 你是对的,我把 -o 标志和 -c 混淆了:/

标签: c linux gcc makefile gnu-make


【解决方案1】:

您需要考虑不同的路径。

一种可能的解决方案是:

CFLAGS := -Wall -g
SRC_DIR := src
EXEC_DIR := exec

SRC_FILES := $(wildcard $(SRC_DIR)/*.c)

all: $(SRC_FILES:$(SRC_DIR)/%.c=$(EXEC_DIR)/%)

$(EXEC_DIR)/%: $(SRC_DIR)/%.c
    gcc $(CFLAGS) $< -o $@

提示:

您可以使用make -n 来检查哪些命令执行,但没有实际执行。

此外,它的选项-p(打印数据库)和-d(调试)有助于调试您的 Makefile。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 2018-11-14
    相关资源
    最近更新 更多