gpt4 book ai didi

c - 在 Makefile 中使用 vpath 和通配符

转载 作者:太空宇宙 更新时间:2023-11-04 03:53:57 24 4
gpt4 key购买 nike

1) 我有一个名为 dir 的目录,子目录是 sub1、sub2、sub3。

2) 我想创建一个 Makefile 来编译子目录中的所有源代码。这些是我的 makefile 的一些行。

CFLAGS = -I/usr/include/ -I./ -ansi -g
GPROF_CFLAGS = -I/usr/include/ -I./
VPATH = ./sub1 ./sub2 ./sub3
SRCS := $(wildcard *.c)
OBJS=$(SRCS:.c=.o)
exe: $(OBJS)
$(CC) $(LFLAG) -o exe $(CFLAGS) $(OBJS) -lm

exe_gprof:
gcc $(LFLAG) -o exe $(GPROF_SUFFIX) $(GPROF_CFLAGS) $(SRCS)

clean:
rm -f *.o

clean_all: clean
rm -f exe exe$(GPROF_SUFFIX) gmon.out Simfir000.stat rm -f *.o.

3) 如果我只有名为 sub 的子文件夹(此目录包含所有源文件)而没有其他子文件夹,则此 make 文件工作正常。 (即)在 make 文件中 vpath=./sub。

4) 如果有我在第1点中提到的子文件夹,则主文件位于sub1/src/main.c的子文件夹中(即子文件夹中的子文件夹)。如果我尝试编译。它为 main 提供了 undefined reference 。

5) 我必须做些什么改变才能成功编译。我们可以在 vpath 中给出多个目录路径吗?

整体图为:

Having directory called dir

sub directory dir/sub1

dir/sub2

dir/sub3

main file is in dir/sub1/src/main.c

我的第二个问题是
如果我想逐个目录执行并创建不同的exe

compiling sub1 only and create sub1exe

copiling sub2 only and create sub2exe.

生成文件将是

CFLAGS = -I/usr/include/ -I./ -ansi -g
GPROF_CFLAGS = -I/usr/include/ -I./
VPATH = ./sub1 ./sub2 ./sub3
SRCS1 := $(wildcard *.c)
SRCS2 := $(wildcard *.c)
OBJS=$(SRCS:.c=.o)
exe1: $(OBJS)
$(CC) $(LFLAG) -o exe1 $(CFLAGS) $(OBJS) -lm
exe2: $(OBJS)
$(CC) $(LFLAG) -o exe2 $(CFLAGS) $(OBJS) -lm

exe1_gprof:
gcc $(LFLAG) -o exe1 $(GPROF_SUFFIX) $(GPROF_CFLAGS) $(SRCS1)
exe2_gprof:
gcc $(LFLAG) -o exe2 $(GPROF_SUFFIX) $(GPROF_CFLAGS) $(SRCS2)

clean:
rm -f *.o

clean_all: clean

我必须做哪些更改而不是 $(wildcard *.c)。

最佳答案

这篇文章似乎回答了您的问题:Sources from subdirectories in Makefile

试试 SRCS = $(wildcard *.c) $(wildcard **/*.c)

我认为 VPATH 和通配符不能一起工作,因此您的 SRCS 没有所有源文件。

顺便问一下,您已经尝试过 CMake 了吗?

关于c - 在 Makefile 中使用 vpath 和通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18607948/

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