我正在嘗試使用相同的源創建兩個二進制文件,只是使用不同的定義。 基本上我在做什麼現在的問題是:Makefile編譯兩次不同定義
OBJ = $(SRC:.cpp=.o)
CPPFLAGS_S = $(INC) -Wall -Wextra -O3 -g -D SERVER
CPPFLAGS_C = $(INC) -Wall -Wextra -O3 -g -D CLIENT
server: CPPFLAGS= $(CPPFLAGS_S)
client: CPPFLAGS= $(CPPFLAGS_C)
server: $(OBJ)
g++ $(OBJ) -o $(NAME_S) $(CPPFLAGS_S) $(LIB)
client: $(OBJ)
g++ $(OBJ) -o $(NAME_C) $(CPPFLAGS_C) $(LIB)
all: server client
顯然它不工作。它所做的是用SERVER定義編譯所有東西,因爲.o文件已經存在,它們將再次用來創建客戶端二進制文件,仍然使用SERVER定義。我可以使用一些幫助。
要麼你需要生成不同的.o文件名客戶端和服務器,或者編譯客戶端時需要丟棄所有.o文件,而最後編譯的二進制文件是服務器。此外,.o文件需要(大概)自己被編譯爲相應的標誌? 第一種情況可以通過爲客戶端和服務器.o文件使用不同的名稱並使用替換來完成,第二種情況可以通過具有「客戶端」和「服務器」所依賴的規則來完成,其中刪除所有的。 o文件取決於二進制文件的時間戳。 – user234461