У меня есть проект 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>