简单应用程序的Makefile

简单应用程序的Makefile,makefile,compilation,libxml2,gstreamer,Makefile,Compilation,Libxml2,Gstreamer,我有一个app.c文件,它使用两个库GStreamer和libXml2。要编译应用程序,我在终端上键入以下命令 gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) app.c -o app -I/usr/include/libxml2 -lxml2 当我尝试生成包含以下内容的文件时: all: gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) app.c -o

我有一个app.c文件,它使用两个库GStreamer和libXml2。要编译应用程序,我在终端上键入以下命令

gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) app.c -o app -I/usr/include/libxml2 -lxml2
当我尝试生成包含以下内容的文件时:

all:
        gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) app.c -o app -I/usr/include/libxml2 -lxml2
run:
        ./app
clean:
        rm app
在运行make命令时,我得到了预期的错误。它的意义是什么

$(pkg-config --cflags --libs gstreamer-0.10)
在回应上述内容时,我得到了一些文件,当包含在Makefile中时,这些文件会为我提供正确的输出。

pkg config--cflags libraryX
输出libraryX头文件的路径。否则,编译器不知道在哪里查找头文件,编译将失败

类似地,
pkg config--libs libraryX
输出到
libraryX
的实际编译库文件的路径。否则,链接器不知道在哪里查找库文件,链接将失败


pkg-config--cflags--libs-libraryX
只是结合了我上面描述的内容。由于您使用
gcc
进行编译和链接,因此只需将这些参数一起传递到
gcc

当我在主机上执行xml2 config--cflags时,我会得到输出-I/usr/include/libxml2作为输出。但是当我在另一个处理器(guest)中执行此操作时,我得到了错误xml config not found,尽管那里安装了libxml2。我想从主机为来宾编写应用程序。所谓“不同的处理器”,是指另一个用户名吗?来宾帐户可能没有正确设置PKG_CONFIG_PATH变量。尝试使用两个用户名执行
echo$PKG\u CONFIG\u PATH
,并比较结果。此外,确保您正在使用
bash
shell(在提示下键入
bash
)。像Ubuntu这样的一些发行版的默认shell是
dash
。我只是在一个
dash
shell中尝试了这一点,但是命令扩展(后引号之间的位)没有得到正确的扩展。