Файлы исходного кода компилируются в объектные файлы индивидуально, но объектные файлы не компилируются вместе - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть проект C ++, который использует несколько внешних статических библиотек и огромную базу кода.

Если я соберу все это так:

g++ (ALL INCLUDE PATHS) (FLAGS) (ALL LIBRARIES) (ALL SOURCES) -o FILE

Все сразу в одной команде, все работает.


Однако я хочу использовать Makefile для генерации файловых объектов и ускорения процесса компиляции.

Я могу сгенерировать объектный файл для каждого отдельного исходного файла, но при попытке собрать их все вместе, вот так:

g++ -o FILE (ALL OBJECT FILES FOUND RECURSIVELY IN THE PATH)

Я получаю следующие ошибки, как если бы они не были скомпилированы со статическими библиотеками

Linux_Release/.compilation_libs/linux.o: In function `WndProc(int, int, int)':
main_Linux.cpp:(.text+0xc6): undefined reference to `XRefreshKeyboardMapping'
main_Linux.cpp:(.text+0x18c): undefined reference to `XLookupKeysym'
main_Linux.cpp:(.text+0x20b): undefined reference to `Xutf8LookupString'
...

Я попытался снова включить include / flags / library в команду, но это не имеет значения.

Вот флаги, которые я использую для индивидуальной компиляции каждого исходного файла:

CFLAGS: = -fmessage-length = 0 -std = c ++ 11 -Wno-sign-сравнить -Wno-unused-local-typedefs -Wno-reorder -Wno-switch -fpermissive -static-libstdc ++ -static-libgc c -Wl, -rpath =.

А вот некоторые из библиотек, включенных в приведенную выше команду

LIBS: = -lcurl -lz -lX11 -lXi -lGL -lGLU -lGLEW -lfreetype -lbass -lbass_fx -lOpenCL (и другие ...)

И цель для создания каждого файлового объекта выглядит следующим образом:

$ (COMPILATION_LIBS_FOLDER) /%. O:% .cpp
mkdir -p '$ (@ D)'
g ++ $ (CFLAGS) $ (FIXED_INCLUDES) $ (LIBPATH) $ (LIBS) -c $ <-o $ @ </p>

...