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