我正在开发一个包含两个程序,一个服务器和一个客户端的C项目。
我的项目结构:Makefile:通配符,用于具有不同源文件的两个程序
.
+--/bin
| +--/client
| +--/server
|
+--/lib
| +--header1.h
| +--header2.h
| +--header3.h
|
+--/obj
| +--/client
| +--/server
|
+--/src
| +--/client
| | +--files.c
| +--/server
| +--otherfiles.c
|
+--Makefile
现在我被困在Makefile文件,我的两个节目需要不同的,有些重叠头。我试图寻找其他项目/存储库,但这并没有帮助我。
这是我目前得到:
SOURCES_CLIENT = ${wildcard src/client/files.c}
SOURCES_SERVER = ${wildcard src/client/otherfiles.c}
HEADERS_CLIENT = ${wildcard lib/header1.h lib/header2.h}
HEADERS_SERVER = ${wildcard lib/header2.h lib/header3.h}
OBJ_CLIENT = ${SOURCES_CLIENT:.c=.o}
OBJ_SERVER = ${SOURCES_SERVER:.c=.o}
CC = gcc
CFLAGS = #not relevant
all: client server
client: ${OBJ_CLIENT}
${CC} -o [email protected] $^
server: ${OBJ_SERVER}
${CC} -o [email protected] $^
我将如何创建一个使用相应的头文件通配符规则转换我的源文件编译成目标文件(在正确的bin /目录)?另外我的Makefile似乎是可优化的,如果是的话,怎么样?
只是为了澄清,你问的是如何在Makefile中生成规则来说明(例如)foo.c依赖于foo.h? –
你似乎在明确命名想要的文件,这很好。然而,在那种情况下,'wildcard'函数(这是btw,GNU特有的)对你没有任何帮助。 –
@ChrisTurner我正在寻找一个将'/ src/client/foo.c'编译为'/ lib/client/foo.o'的规则,同时依赖于相应的头文件'$ {HEADERS_CLIENT}'。编辑:规则应该是动态的,所以也适用于服务器。 – Zonko