You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Makefile实现两个不同目录下C语言源文件的联合编译

跨目录C源文件联合编译Makefile实现方案

你当前的目录结构如下:

~/learn2prog/
├── 15_tests_subseq/
│   └── test-subseq.c
└── 16_subseq/
    ├── maxSeq.c
    └── Makefile(存放位置)

你可以直接使用下面的Makefile内容实现需求,有两种实现方式可选:

方案1:使用VPATH指定源文件搜索路径(更简洁,推荐)

# 编译器配置
CC := gcc
CFLAGS := -Wall -g
# 如果test-subseq.c依赖的头文件也在15_tests_subseq目录下,取消下一行注释
# CFLAGS += -I../15_tests_subseq

# 源文件搜索路径:添加test-subseq.c所在的上级目录下的15_tests_subseq
VPATH := ../15_tests_subseq

# 配置项:源文件列表、目标文件列表、最终生成的可执行文件名
SRC := test-subseq.c maxSeq.c
OBJ := $(SRC:.c=.o)
TARGET := subseq_test

# 默认编译目标
all: $(TARGET)

# 链接所有目标文件生成可执行程序
$(TARGET): $(OBJ)
	$(CC) $(CFLAGS) -o $@ $^

# 模式规则:自动将所有.c源文件编译为对应的.o目标文件
%.o: %.c
	$(CC) $(CFLAGS) -c -o $@ $<

# 清理规则:删除所有编译生成的文件
.PHONY: clean
clean:
	rm -f $(OBJ) $(TARGET)

方案2:直接指定源文件完整相对路径

# 编译器配置
CC := gcc
CFLAGS := -Wall -g
# 如果有头文件在15_tests_subseq目录下,取消下一行注释
# CFLAGS += -I../15_tests_subseq

# 直接写全两个源文件的相对路径(相对于Makefile所在的16_subseq目录)
SRC := ../15_tests_subseq/test-subseq.c ./maxSeq.c
OBJ := $(SRC:.c=.o)
TARGET := subseq_test

all: $(TARGET)
$(TARGET): $(OBJ)
	$(CC) $(CFLAGS) -o $@ $^
%.o: %.c
	$(CC) $(CFLAGS) -c -o $@ $<
.PHONY: clean
clean:
	rm -f $(OBJ) $(TARGET)

使用方法

  1. 将上面任意一种方案的内容复制,保存到~/learn2prog/16_subseq/目录下,命名为Makefile
  2. 打开终端,切换到Makefile所在目录:
    cd ~/learn2prog/16_subseq
    
  3. 执行编译命令:
    make
    
  4. 编译完成后运行生成的可执行程序:
    ./subseq_test
    
  5. 如需删除编译生成的.o文件和可执行文件,执行:
    make clean
    

内容的提问来源于stack exchange,提问作者user3120824

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:54:04