簡體   English   中英

編譯文件似乎不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM