Makefile - Как сохранить .o один каталог вверх? - PullRequest
3 голосов
/ 11 апреля 2010

Представьте себе следующую структуру папок:

  • проект
    • ЦСИ
      • code.c
      • Makefile
    • корзина

Как я могу скомпилировать code.c в code.o и напрямую поместить его в bin? Я знаю, что могу скомпилировать его в code.o под src и do "mv code.o ../bin", но это приведет к ошибке, если будут ошибки компиляции, верно? Даже если это работает таким образом, есть ли лучший способ сделать это?

Спасибо.

Ответы [ 4 ]

5 голосов
/ 11 апреля 2010

Процесс должен или не должен «выдавать ошибку» в зависимости от того, что вы имеете в виду. Если будут ошибки компилятора, вы об этом узнаете.

Тем не менее, есть несколько способов сделать это с помощью make. Лучшими в этом случае, вероятно, являются:

  • Вы можете положить Makefile в корзину. Make хорош в использовании файлов там для создания файлов здесь , но не наоборот.
  • Вы можете указать целевой путь в цели makefile:
    $(MAIN_DIR)/bin/%.o: %.c
        $(COMPILE)...
    
2 голосов
/ 18 июня 2013

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

$(subst $(notdir $(CURDIR)),,$(CURDIR))

если ваш проект выглядит так:

~/myProject/
    src/
        Makefile
        #all the .c and .cpp
    bin/
        #where you want to put the binaries.

$ (CURDIR) выведет ~ / myProject / src

$ (subst $ (notdir $ (CURDIR)) ,, $ (CURDIR)) выведет ~ / myProject

0 голосов
/ 11 апреля 2010

Вы все еще можете использовать подход перемещения и пережить ошибки компилятора:

cc -c code.c && mv code.o ../bin

Это не запустит часть "mv", если часть "cc" завершится ошибкой.

0 голосов
/ 11 апреля 2010

Вы можете попробовать переместиться, но только когда компиляция прошла успешно, используя &&:

code.o: code.c code.h
    g++ -c code.c && mv code.o ../

mv code.o ../ будет выполнено, только если g++ вернул 0, то есть когда компиляция прошла успешно. Это может не подойти вам, если у вас очень сложный makefile, но я решил поделиться тем, что знаю.

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