У меня есть доступ к большому проекту C ++, заполненному файлами и с очень сложным make-файлом, предоставленным automake & friends
Вот идея структуры каталогов.
otherproject/
folder1/
some_headers.h
some_files.cpp
...
folderN/
more_headers.h
more_files.cpp
build/
lots_of things here
objs/
lots_of_stuff.o
an_executable_I_dont_need.exe
my_stuff/
my_program.cpp
Я хочу использовать класс из большого проекта , объявленный, скажем, "some_header.h"
/* my_program.cpp */
#include "some_header.h"
int main()
{
ThatClass x;
x.frobnicate();
}
Мне удалось скомпилировать мой файл, кропотливо передавая множество символов "-I"опции для gcc, чтобы он мог найти все файлы заголовков
g++ my_program.cpp -c -o myprog.o -I../other/folder1 ... -I../other/folderN
Когда дело доходит до компиляции, я должен вручную включить все его ".o", что, вероятно, излишне
g++ -o my_executable myprog.o ../other/build/objs/*.o
Однако я не только должен делать такие вещи, как ручное удаление его «main.o» из списка, но этого даже недостаточно, поскольку я забыл также ссылаться на все библиотеки, которые он использовал.
otherproject/build/objs/StreamBuffer.h:50: undefined reference to `gzread'
В этот момент я начинаю чувствовать, что, возможно, я делаю что-то очень неправильное. Как мне поступить?Что является обычным и как лучше всего подойти к такого рода проблемам?
Мне нужно это для работы на Linux на случай, если нужно будет что-то сделать для конкретной платформы.