簡體   English   中英

Makefile的注冊依序不正確

[英]Makefile doesn't register dependencies in the right order

我正在為使用C ++進行的項目編寫makefile。 我有一個名為tests的目錄,其中包含用於單元測試的代碼,其中包括使用cxxtest的文件。

生成文件為:

CC=clang++
CFLAGS=-c -Wall -std=c++11
LDFLAGS= -lsfml-graphics -lsfml-system -lsfml-window
SOURCES=memtest.cpp guitest.cpp
CXXTEST=LTest.h
CXXCPP=$(CXXTEST:.h=.cpp)
CXXOBJ=$(CXXTEST:.h=.o)
CXXBIN=$(CXXTEST:.h=.bin)
MAX_PARALLEL=6
OBJECTS=$(SOURCES:.cpp=.o)
BINS=$(SOURCES:.cpp=.b)

all: $(CXXBIN)

run: all


$(CXXCPP): $(subst .cpp,.h,$@)
cxxtestgen --error-printer -o $@ $(subst .cpp,.h,$@)


$(CXXOBJ): $(subst .o,.cpp,$@)
$(CC) $(CFLAGS) -o $@ $(subst .o,.cpp,$@)

$(CXXBIN): $(subst .bin,.o,$@) 
$(CC) $(subst .bin,.o,$@) $(OBJECTS) -o $@


$(OBJECTS): $(subst .o,.cpp,$@)
$(CC) $(CFLAGS) $(subst .o,.cpp,$@) -o $@

$(BINS): $(subst .b,.o,$@)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
clean:
rm -f LTest.cpp LTest LTest.o guitest guitest.o

但是,當我運行存在make LTest LTest時,make正在嘗試運行

  clang++ -c -Wall -std=c++11 -o LTest.o LTest.cpp

無需先創建LTest.cpp。

顯然, $(subst .o,.cpp,$@) sub.o, $(subst .o,.cpp,$@)擴展為LTest.cpp,為什么這不起作用?

$@這樣的自動變量僅在配方中有意義: 完全解析依賴項行make它們make計算。 在解釋依賴項時, $@設置為空。 您必須明確說明:

$(CXXCPP): $(CXXTEST)
    cxxtestgen ... (this line may use $@, $^, etc)

暫無
暫無

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

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