对于学校项目,我需要创建一个Makefile来编译子目录,而不使用任何其他Makefile。我的意思是我不允许这样做:
make -C <sub-folder>
以下是它的样子:
在当地:
./Makefile
./sub
./sub2
在子目录中:
./sub/file1.c
./sub/file2.c
./sub/file3.c
./sub/file4.c
./sub2/file1.c
./sub2/file2.c
./sub2/file3.c
./sub2/file4.c
这是我到目前为止所做的,但我一直都会遇到错误:
CC = gcc -W -Wall -Werror
NAME = test
NAME2 = test2
SRCS = sub/file1.c \
sub/file2.c \
sub/file3.c \
sub/file4.c
SRCS2 = sub2/file1.c \
sub2/file2.c \
sub2/file3.c \
sub2/file4.c
OBJS = $(SRCS:.c=.o)
OBJS2 = $(SRCS2:.c=.o)
all:
$(OBJS)
$(CC) $(OBJS) -o $(NAME)
$(OBJS2)
$(CC) $(OBJS2) -o $(NAME2)
谢谢你,Ephismen。
[编辑]编辑我的问题 我的问题有所改变。我需要在同一个Makefile中编译,总是使用相同的规则,两个不同的二进制文件。我尝试了一下对一个有用的东西,但它似乎不适合两个。如果您有任何建议,请告诉我。
发布的代码有效,但只编译第一个二进制文件。
答案 0 :(得分:2)
参见这篇文章:
Make Tutorial: How-To Write A Makefile
它解释了所有内容,包括为什么不使用递归make和如何做包括。
你特别想阅读:Recursive Make Considered Harmful解释了为什么递归make很糟糕以及避免它的方法。
答案 1 :(得分:1)
使用以下内容(记得在行的开头放置制表符而不是空格):
all: $(NAME) $(NAME2)
$(NAME): $(OBJS)
$(CC) $(OBJS) -o $(NAME)
$(NAME2): $(OBJS2)
$(CC) $(OBJS2) -o $(NAME2)