1

我写了一个运行良好的 GCC 插件。我创建了一个 Makefile,它执行以下命令来创建插件:

$ g++ -I$(INCLUDE_PATHS) -fPIC -shared $(SOURCE_PATHS) -o Plugin.so

我使用以下命令执行插件:

$ g++ -S -fplugin=./Plugin.so /TestProgramm.cpp

这工作得很好。现在我想在调用插件时显示一个 QT GUI。我在 Eclipse 中编写了 GUI,所以我得到了一个自动生成的 MakeFile。执行 GUI 时,Eclipse 执行以下命令:

g++ -c -pipe -g -Wall -W -D_REENTRANT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I$(QT_INCLUDE_PATHS) -o debug/GUI.o GUI.cpp

g++ -Wl,-rpath,/opt/QtSDK/Desktop/Qt/4.8.1/gcc/lib -o GraphGUI debug/GUI.o debug/main.o debug/GraphGUI.o debug/moc_GraphGUI.o -L/opt/QtSDK/Desktop/Qt/4.8.1/gcc/lib -lQtGui -L/opt/QtSDK/Desktop/Qt/4.8.1/gcc/lib -L/usr/X11R6/lib -lQtCore -lpthread

GraphGUI 和 GUI 是我写的 GUI 的类。

现在我想将这些语句组合到我自己的 Makefile 中,以便编译器编译我的插件和我的 GUI。几天前我开始使用 Makefiles,所以我只了解了 Makefiles 的基础知识。希望有人能帮助我。

这是我的Makefile:

GCC := g++
FILENAME := Explorer.so

GCC_INCLUDE := -I/usr/lib/gcc/i686-linux-gnu/4.6/plugin/include
QT_INCLUDE := -I/opt/QtSDK/Desktop/Qt/4.8.1/gcc/mkspecs/default \
              -I/opt/QtSDK/Desktop/Qt/4.8.1/gcc/include/QtCore \
              -I/opt/QtSDK/Desktop/Qt/4.8.1/gcc/include/QtGui \
              -I/opt/QtSDK/Desktop/Qt/4.8.1/gcc/include 

SOURCE_FILES = ## Some .cpp files for the plugin ##


$(FILENAME): 

    @$(GCC) $(GCC_INCLUDE) -fPIC -shared $(SOURCE_FILES) -o $@ $^

clean:
    @rm $(FILENAME)

我尝试创建 GUI 的目标文件,然后将它们包含在创建插件的命令中;像这样:

    $(GCC) -c -pipe -g -Wall -W -D_REENTRANT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED $(QT_INCLUDE) -Idebug -I. -o debug/GUI.o src/Visualize/GUI.cpp

    $(GCC) -c -pipe -g -Wall -W -D_REENTRANT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED $(QT_INCLUDE) -Idebug -I. -o debug/GraphGUI.o src/Visualize/GraphGUI.cpp

    # /opt/QtSDK/Desktop/Qt/4.8.1/gcc/bin/moc -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED $(QT_INCLUDE) -Idebug -I. src/Visualize/GraphGUI.h -o debug/moc_GraphGUI.cpp

    # $(GCC) -c -pipe -g -Wall -W -D_REENTRANT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED $(QT_INCLUDE) -Idebug -I. -o debug/moc_GraphGUI.o debug/moc_GraphGUI.cpp

    $(GCC) $(PLUGIN_INCLUDE) -fPIC -shared $(SOURCE_FILES) debug/GraphGUI.o debug/GUI.o -o $@ $^

如果我像这样执行它,我会得到未定义的符号:_ZN11QMainWindowC2EP7QWidget6QFlagsIN2Qt10WindowTypeEE 错误。如果我也执行以“#”开头的两个命令,我会得到“未定义的 main 引用”。我只是从 eclipse 中复制了这些命令;我实际上不知道他们在做什么。

4

0 回答 0