2015-09-04 4 views
0

Я пытаюсь создать очень простой make-файл, который будет строить мой код на C++, а также создать файл .txt.Как исправить эту простую ошибку Makefile?

Я хочу, чтобы исполняемый файл и .txt-файл были помещены в каталог с именем «build». Для этого мне нужно убедиться, что каталог сборки еще не существует. Я получаю синтаксическую ошибку, и я не могу ее исправить. Это, вероятно, очень очевидная ошибка, поскольку я новичок в создании make-файлов.

Может ли кто-нибудь помочь?

Ошибка:

/bin/sh: -c: line 1: syntax error: unexpected end of file make: *** [mlib] Error 2

Файл Makefile:

all: 
    if [ ! -d build ]; then 
     mkdir build 
    fi 
    g++ src/*.cpp -o build/mlb 
    touch build/mlib_history.txt 
+1

Этого Makefile не воспользоваться ** ** любого из вещей, которые делают делают для вас и может так же, как полезно быть сценарием оболочки. –

+1

Также см. Специальную цель ['.ONESHELL'] (https://www.gnu.org/software/make/manual/make.html#One-Shell), но, как @EtanReisner говорит, что ваш рецепт изобретает колесо для вещи, которые makefile уже может обрабатывать для вас. – user657267

ответ

1

Я фактически установил его, просто изменив Makefile на:

всего:

if [ ! -d build ]; then mkdir build; fi 
#"mkdir build" moved onto the above line 
#somehow this fixed it...? 
g++ src/*.cpp -o build/mlb 
touch build/mlib_history.txt 
+4

Каждая строка в рецепте makefile запускается в собственной оболочке. Чтобы получить команду оболочки для охвата нескольких строк, вам нужно сообщить make продолжить строку (с обратной косой чертой в конце строки). –

+0

Кажется, проще просто сделать 'mkdir -p build' –

0

Вот немного лучшее решение ...

.PHONY: all 

BUILD_DIR := build 

all: 
    [ ! -d $(BUILD_DIR) ] && mkdir $(BUILD_DIR) 
    g++ src/*.cpp -o $(BUILD_DIR)/mlb 
    touch $(BUILD_DIR)/mlib_history.txt 
Смежные вопросы