簡體   English   中英

GNU無法檢測Windows上的文件是否已更改

[英]GNU make not detecting if files are changed on windows

我是個菜鳥,因此通常會提前道歉。

我有一個文件夾結構,其中foo.cpp位於項目的根目錄中,所有其他.cpp文件位於一個文件夾中,所有標頭位於另一個文件夾中。 每當我更改某些內容時,只需說所有內容都是最新的即可。

在Windows上工作10。

該代碼來自

我的makefile文件:

OBJS = foo.o bar.o
CC = g++
INCLUDE_PATHS = -IC:\Mingw_libs\include\SDL2
LIBRARY_PATHS = -LC:\Mingw_libs\lib -Iheaders
COMPILER_FLAGS = -std=c++11
LINKER_FLAGS = -lmingw32 -lSDL2main -lSDL2 -lSDL2_image 

OUTPUTFILE = main

all: $(OBJS)
    $(CC) $(OBJS) $(INCLUDE_PATHS) $(LIBRARY_PATHS) $(LINKER_FLAGS) -o $(OUTPUTFILE)

clean:
    rm *.o
    rm *.exe

foo.o:
    $(CC) -c foo.cpp $(INCLUDE_PATHS) $(COMPILER_FLAGS) $(LIBRARY_PATHS) $(LINKER_FLAGS)

bar.o:
    $(CC) -c sources/bar.cpp $(INCLUDE_PATHS) $(COMPILER_FLAGS) $(LIBRARY_PATHS) $(LINKER_FLAGS)

您應該像這樣聲明目標依賴關系:

foo.obj: foo.c
    ....

否則,make現在不會將文件夾在中間以檢查更改。

您的makefile不具有foo.obar.o依賴項。

這個

all: $(OBJS)
    $(CC) $(OBJS) $(INCLUDE_PATHS) $(LIBRARY_PATHS) $(LINKER_FLAGS) -o $(OUTPUTFILE)

all取決於$(OBJS) 因此,當$(OBJS)中的文件之一更改時,將運行該步驟。

這說foo.o無關緊要:

foo.o:
    $(CC) -c foo.cpp $(INCLUDE_PATHS) $(COMPILER_FLAGS) $(LIBRARY_PATHS) $(LINKER_FLAGS)

您需要添加依賴項:

foo.o: foo.cpp
    $(CC) -c foo.cpp $(INCLUDE_PATHS) $(COMPILER_FLAGS) $(LIBRARY_PATHS) $(LINKER_FLAGS)

請注意:之后的空格通常必須是制表符,而不是實際空格。

您需要向目標添加依賴項。 Make具有語法

target : prerequisite
    command

因此,在您的情況下:

foo.o: foo.cpp
    $(CC) -c $< $(INCLUDE_PATHS) $(COMPILER_FLAGS) $(LIBRARY_PATHS) $(LINKER_FLAGS)

bar

$<是第一個前提條件的占位符。 因此,您不必兩次鍵入foo.cpp

您可以在此處檢出更多自動變量: https : //www.gnu.org/software/make/manual/make.html#Automatic-Variables

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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