gcc/g ++ опция поместить все объектные файлы в отдельный каталог

Я задаюсь вопросом, почему 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 (и другие компиляторы также).

60
задан 16 December 2009 в 21:43

2 ответа

Я пытаюсь выяснить то же самое. Для меня это работало

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
``
1
ответ дан 1 November 2019 в 10:10

Лично для единственных файлов я делаю это,

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-файлов.

0
ответ дан 1 November 2019 в 10:10

Другие вопросы по тегам:

Похожие вопросы: