gpt4 book ai didi

c - 模式规则和 VPATH,makefile

转载 作者:太空宇宙 更新时间:2023-11-04 04:27:05 26 4
gpt4 key购买 nike

尝试练习一下,因为稍后我需要编写一个 makefile。我有以下文件夹结构

./Folder1/header1.h
./Folder1/src1.c
./Folder2/header2.h
./Folder2/src2.c
main.c
Makefile

每个文件的代码如下

header1.h

#include <stdio.h>

void print_1();

header2.h

#include <stdio.h>

void print_1();

src1.c

#include <header1.h>

void print_1() {
printf("This is function1\n");
}

src2.c

#include <header2.h>

void print_2() {
printf("This is function2\n");
}

主.c

#include <header1.h>
#include <header2.h>

int main(int argc, char **argv) {
print_1();
print_2();
return 0;
}

生成文件

CC=gcc
VPATH=./Folder1:./Folder2
OUT_FILE=test

%.o : %.c
$(CC) -c $< -o $@

all : %.o

目前的想法是,让我们使用 VPATH 变量生成目标文件。规则 %.o : %.c 应该告诉,为每个源文件生成目标文件(它们应该在 Makefile 和 main.c 的同一级别返回)。

第二条规则应该有目标文件的先决条件,所以它应该调用第一条规则。

然而它不起作用,为什么?

(自从我上一个 makefile 以来已经有一段时间了)。

最佳答案

您不能让 all 依赖于 %.o -- 百分比用于模式规则,而 all 不是模式规则。你想要这样的东西:

CC=gcc
DIRS=Folder1 Folder2
CFILES=$(foreach dir,$(DIRS),$(wildcard $(dir)/*.c))
OFILES=$(CFILES:.c=.o)

%.o : %.c
$(CC) -c $< -o $@

all : $(OFILES)

CFILES 将包含目录中的 c 文件,OFILES 将是要生成的 .o 文件列表。模式规则将足够智能以填充目录名称。

关于c - 模式规则和 VPATH,makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40365073/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com