[英]The compile file doesn´t seem to be working
我想問一下下面的 Makefile 是否正確編寫,因為程序似乎沒有正確編譯,但我不確定是 makefile 還是代碼有問題:
CC = /usr/bin/gcc
CFLAGS = -g -Wall -Wextra -Werror -pthread
DEPS = config.h shmHandling.h gameboard.h thinker.h strTools.h performConnection.h main.h
OBJ = main.o config.o shmHandling.o gameboard.o thinker.o strTools.o performConnection.o
# Link all .o files to program
%.o: %.c $(DEPS)
@echo "-----------------------"
@echo "Linking object files"
$(CC) -o -c $@ $< $(CFLAGS)
sysprak-client: $(OBJ)
$(CC) -o $@ $^ $(CFLAGS)
# Compile everything and run it with CL params
.PHONY: play
play: sysprak-client
@echo "-----------------------"
@echo "Launching sysprak-client with GameID: $(GAME_ID)"
./sysprak-client -g $(GAME_ID) -p $(PLAYER)
.PHONY: clean
clean:
-rm *.o $(OBJ)
謝謝!
這個食譜:
$(CC) -o -c $@ $< $(CFLAGS)
應該:
$(CC) -o $@ -c $< $(CFLAGS)
-o
選項后面必須跟 output 文件名,並且$@
與目標 object 文件的名稱完全相同。 所以-o $@
是正確的,而-o -c
不是。
注意:它所屬的規則之前的注釋是錯誤的。 該規則將 C 源文件編譯為 object 文件。 將all.o 文件鏈接到程序是以下規則。 與echo
命令相同。 您可能應該將所有這些重寫為:
# Compile each .c to .o
%.o: %.c $(DEPS)
@echo "-----------------------"
@echo "Compiling $<"
$(CC) -o $@ -c $< $(CFLAGS)
# Link all .o files to program
sysprak-client: $(OBJ)
@echo "Linking object files"
$(CC) -o $@ $^ $(CFLAGS)
# Run with CL params
.PHONY: play
play: sysprak-client
@echo "-----------------------"
@echo "Launching sysprak-client with GameID: $(GAME_ID)"
./sysprak-client -g $(GAME_ID) -p $(PLAYER)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.