简单应用程序的 Makefile
我有一个文件 app.c,它使用两个库 GStreamer 和 libXml2。要编译应用程序,我在终端上键入以下内容
gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) app.c -o app -I/usr/include/libxml2 -lxml2
当我尝试使用以下内容创建 Makefile 时:
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 中时会给出正确的输出。
I have a file app.c which uses two libraries GStreamer and libXml2. To compile the application I type the following on Terminal
gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) app.c -o app -I/usr/include/libxml2 -lxml2
When I try to Makefile with the contents as follows :
all:
gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) app.c -o app -I/usr/include/libxml2 -lxml2
run:
./app
clean:
rm app
On running make command I get the errors as expected. What is the significance of
$(pkg-config --cflags --libs gstreamer-0.10)
on Echoing the above I get some files which when included in Makefile gives me the correct output.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
pkg-config --cflags libraryX
输出libraryX头文件的路径。如果没有这个,编译器就不知道去哪里寻找头文件,编译就会失败。同样,
pkg-config --libs libraryX
输出libraryX
实际编译的库文件的路径。如果没有这个,链接器就不知道去哪里寻找库文件,链接就会失败。pkg-config --cflags --libs libraryX
只是结合了我上面描述的内容。由于您使用gcc
进行编译和链接,因此只需将这些参数一起传递给gcc
即可。pkg-config --cflags libraryX
outputs the path to the header files of libraryX. Without this, the compiler does not know where to look for the header files, and compilation will fail.Similarly,
pkg-config --libs libraryX
outputs the path to the actual compiled library files oflibraryX
. Without this, the linker does not know where to look for the library files, and linking will fail.pkg-config --cflags --libs libraryX
is just combining what I described above. Since you're usinggcc
to do both compilation and linking, you just pass those parameters together togcc
.