Makefile не будет расширять зависимости - PullRequest
1 голос
/ 31 октября 2011

Используя в качестве примера make-файл:

CC=g++ CFLAGS=-c -Wall LDFLAGS=-lfoobar SOURCES=main.cpp foo.cpp bar.cpp OBJECTS=$(SOURCES:.cpp=.o) EXECUTABLE=hello</p> <p>all: $(OBJECTS) $(CC) $(LDFLAGS) $(OBJECTS) -o $@</p> <p>$(OBJECTS): $(CC) $(CFLAGS) $< -o $@

$ <всегда расширяется до нуля. </p>

Я пытался изменить его на следующее:

CC=g++ CFLAGS=-c -Wall LDFLAGS= SOURCES=main.cpp foo.cpp bar.cpp OBJECTS=$(SOURCES:.cpp=.o) EXECUTABLE=hello</p> <p>all: $(OBJECTS) # or main.o foo.o bar.cpp $(CC) $(LDFLAGS) $(OBJECTS) -o $@</p> <p>.cpp.o: $(CC) $(CFLAGS) $< -o $@

Это говорит мне, что для main.o

нет никаких правил.

Я что-то здесь упускаю? Я вижу много файлов make, использующих эти синтаксисы и / или переменные и зависимости.

1 Ответ

2 голосов
/ 31 октября 2011

Попробуйте это:

CXX=g++
CXXFLAGS=-c -Wall
LDFLAGS=
SOURCES=main.cpp foo.cpp bar.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=hello

all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)  # or main.o foo.o bar.cpp
    $(CXX) -o $@ $(LDFLAGS) $(OBJECTS) $(LIBS)

Правило построения каждого объектного файла в любом случае является встроенным, поэтому нет необходимости определять его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...