#makefile #ubuntu-16.04
#makefile #ubuntu-16.04
Вопрос:
Я новичок в Ubuntu и, следовательно, в make file. Я успешно создал make-файл со структурой папок. Однако, если я добавлю аналогичную структуру, я получу сообщение об ошибке.
Я успешно выполнил команду make и запустил приложение с одним основным файлом cpp и двумя файлами (list_menu.cpp и list_menu.h ) в подпапках cpp11_and_cpp14_menu
структура папок выглядит точно так же, как показано ниже, где cpp11_and_cpp14.cpp имеет основную функцию.
../advancedcppproject/
cpp11_and_cpp14.cpp
Makefile
../advancedcppproject/cpp11_and_cpp14_menu
list_menu.cpp
list_menu.h
../advancedcppproject/multi_threading_example
multi_threading.cpp
multi_threading.h
Содержимое файла Make является
cpp11_and_cpp14 : cpp11_and_cpp14.o ./multi_threading_example/multi_threading.o ./cpp11_and_cpp14_menu/list_menu.o
g cpp11_and_cpp14.o ./multi_threading_example/multi_threading.o ./cpp11_and_cpp14_menu/list_menu.o -o cpp11_and_cpp14
cpp11_and_cpp14.o : cpp11_and_cpp14.cpp ./cpp11_and_cpp14_menu/list_menu.h ./multi_threading_example/multi_threading.h
g -c cpp11_and_cpp14.cpp
./cpp11_and_cpp14_menu/list_menu.0 : ./cpp11_and_cpp14_menu/list_menu.cpp ./cpp11_and_cpp14_menu/list_menu.h
g -c ./cpp11_and_cpp14_menu/list_menu.cpp
./multi_threading_example/multi_threading.o : ./multi_threading_example/multi_threading.cpp ./multi_threading_example/multi_threading.h
g -c ./multi_threading_example/multi_threading.cpp
После выполнения команды make происходит сбой с сообщением об ошибке
g -c ./multi_threading_example/multi_threading.cpp
g cpp11_and_cpp14.o ./multi_threading_example/multi_threading.o ./cpp11_and_cpp14_menu/list_menu.o -o cpp11_and_cpp14
g : error: ./multi_threading_example/multi_threading.o: No such file or directory
Makefile:6: recipe for target 'cpp11_and_cpp14' failed
make: *** [cpp11_and_cpp14] Error 1
Я ожидаю, что multi_threading.o будет создан в папке ../advancedcppproject/multi_threading_example. Однако многопоточность.o создается в ../advancedcppproject.
Где как list_menu.o правильно создан в ../advancedcppproject/cpp11_and_cpp14_menu.
Что не так?
Комментарии:
1. По умолчанию gcc создает выходные файлы в текущем каталоге (pwd). Который все тот же, с которого был запущен make. КСТАТИ. Используйте переменные (вкл. автоматически) и шаблонов, поскольку ваш makefile практически нечитаем / недоступен для обслуживания человеком.
2. Спасибо, Мэтт, но я вижу, что list_menu.o создается в его подпапке. Есть ли какой-либо способ, которым я могу это сделать, что многопоточность. o также создается в соответствующей папке?
3. Используйте опцию gcc -o.
4. Ваш пример вообще не указывает на то, что он создается
list_menu.o
, и в вашем makefile фактически нет правила для этого. Мы можем улучшить этот makefile, но вы должны внести свой вклад.5. Спасибо Бета, мой единственный вопрос в том, почему при той же файловой структуре и тех же соответствующих записях в Makefile я вижу menu_list.o в его подпапке (../ advancedcppproject/cpp11_and_cpp14_menu) и многопоточность. o в основной папке (../advancedcppproject/)