我目前有以下Makefile(我简化了一下):
ROOT=../mylib
CPPFLAGS = -I$(ROOT)/include
CFLAGS = -Wall -Werror -Wextra -pedantic -std=c99
LDFLAGS = -L$(ROOT)/lib
LDLIBS = -lmylib
BIN= \
exec1 \
exec2 \
exec3
OBJ=$(SRC:.c=.o)
DEP=$(SRC:.c=.d)
.PHONY: all
all: $(BIN)
exec3: exec3.o utils1.o utils2.o
-include $(DEP)
.PHONY: clean
clean:
$(RM) *.o *~
我认为这是理所当然的,因为我对Makefiles不太熟悉。但是我现在需要为我的项目添加更多结构(现在,我的所有文件都与Makefile位于同一目录中)。
我的项目生成了几个可执行文件(exec1,exec2,exec3 ......)。有些只是一个.c文件(exec1,exec2),而有些则需要其他文件(exec3)。我有一些文件不生成可执行文件(utils1,utils2),在我的整个项目中我使用外部库(mylib)。
现在我希望可执行文件放在bin
文件夹中,生成的目标文件放在obj
文件夹中,而.c和.h文件放在src
文件夹中。执行src
部分并不难,我只需要在exec1,...,exec3,utils1,utils2之前添加src/
。
但是我不知道如何重新定位.o和可执行文件,因为没有显式调用gcc
(没有$(CC) $(CFLAGS) -c $(input) -o $(output)
),我想保留它如果可能的话。
(作为一个附带问题,我应该在utils1.h/.c
中保留src/
...之类的文件,还是应该将它们放在特定的lib
或app
文件夹中?)