我有一个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'
...
我试图再次将includes / flags / libraries放回命令中,但这没什么不同。
以下是我用于分别编译每个源文件的标志:
CFLAGS:= -fmessage-length = 0 -std = c ++ 11 -Wno-sign-compare -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 $ @