У меня есть эта цель Makefile, который содержит следующие шаги:Clang ++ -c выводит файлы в том каталоге
...
cd $(GRAPHICS_BUILD_DIR)
clang++ -c -I$(SFML_HEADERS) $(GRAPHICS_DIR)/*.cpp
cd $(BASE_DIR)
...
По какой-то причине, Clang выводит файлы сборки в BASE_DIR
, не GRAPHICS_BUILD_DIR
. Все компилируется отлично, и когда я выполняю одну строку за раз вручную, она работает нормально, а файлы *.o
выводятся в правильной директории.
Почему не следует помещать эти файлы в правильный каталог и как его заставить?
Я использую clang3.1 и текущую версию GNUMake на ядре Linux Ubuntu 3.2.0-26.
Чтобы указать выходной файл, чтобы произвести можно передать '-o ...' флаг звоном. Например. 'clang ++ -c -I $ (SFML_HEADERS) $ (GRAPHICS_DIR)/$ (FILE) .cpp -o $ (GRAPHICS_BUILD_DIR)/$ (FILE) .o' Хотя мне кажется, что' cd'ing в выходной каталог в вашем скрипте должно быть указано, что файлы находятся в этом каталоге вывода по умолчанию. – bames53
@ bames53: Я не могу передать флаг -o, потому что я компилирую несколько файлов. – jepugs
Да, поэтому я не ответил на это. Вы, вероятно, не должны так строить. Обычно make-файлы имеют библиотеки и исполняемые объекты, которые явно перечисляют, на каких объектных файлах они зависят, а затем существует общее правило для создания объектного файла. Помимо всего прочего, это позволяет быстро восстанавливать части на основе графика зависимостей и позволяет явно указывать выходной файл с флагом '-o'. – bames53