Я задаюсь вопросом, почему gcc/g ++ не имеет опции поместить сгенерированные объектные файлы в указанный каталог.
Например:
mkdir builddir
mkdir builddir/objdir
cd srcdir
gcc -c file1.c file2.c file3.c **--outdir=**../builddir/objdir
Я знаю, что это возможно к achive это с отдельными-o опциями, данными компилятору, например:
gcc -c file1.c -o ../builddir/objdir/file1.o
gcc -c file2.c -o ../builddir/objdir/file2.o
gcc -c file3.c -o ../builddir/objdir/file3.o
... и я знаю, что могу записать Make-файлы через VPATH и vpath директивы для упрощения этого.
Но это - большая работа в сложной среде сборки.
Я мог также использовать
gcc -c file1.c file2.c file3.c
Но когда я использую этот подход, мой srcdir полон.o мусора впоследствии.
Таким образом, я думаю, что опция с семантикой - outdir была бы очень полезна.
Каково Ваше мнение?
Править: наши Make-файлы записаны таким способом который.o файлы, на самом деле помещенные в builddir/obj. Но я просто задаюсь вопросом, мог ли быть лучший подход.
Править: Существует несколько подходов, которые помещают, нагрузка для достижения желаемого поведения к системе сборки (иначе Делают, CMake и т.д.). Но я рассматриваю их всех как являющихся обходными решениями для слабости gcc (и другие компиляторы также).
Я пытаюсь выяснить то же самое. Для меня это работало
CC = g++
CFLAGS = -g -Wall -Iinclude
CV4LIBS = `pkg-config --libs opencv4`
CV4FLAGS = `pkg-config --cflags opencv4`
default: track
track: main.o
$(CC) -o track $(CV4LIBS) ./obj/main.o
ALLFLAGS = $(CFLAGS) $(CV4FLAGS)
main.o: ./src/main.cpp ./include/main.hpp
$(CC) $(ALLFLAGS) -c ./src/main.cpp $(CV4LIBS) -o ./obj/main.o
``
Лично для единственных файлов я делаю это,
rm -rf temps; mkdir temps; cd temps/ ; gcc -Wall -v --save-temps ../thisfile.c ; cd ../ ; geany thisfile.c temps/thisfile.s temps/thisfile.i
, папка временных файлов сохранит весь объект, предварительно обработанный и файлы блока.
Это - сырой способ сделать вещи, и я предпочел бы выше ответов с помощью Make-файлов.