我正在開發一個包含兩個程序,一個服務器和一個客戶端的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