编译sdl c程序时“sdl-config”是什么意思?

Vin*_*uda 6 c c++ gcc sdl compilation

在许多教程中我看到sdl-config编译 sdl c 程序。在c++的例子中我也见过。这是来自此处的示例。

g++ sdlExample.cpp `sdl-config --cflags --libs` -o sdlExample
Run Code Online (Sandbox Code Playgroud)

是什么sdl-config --cflags --libs意思?为什么里面有口音?

Zif*_*ion 5

在执行命令的 shell 中,反引号意味着命令替换。因此,基本上,反引号内的任何内容都将作为命令执行,并且其输出将被替换。

例子:

echo Today is `date`
Run Code Online (Sandbox Code Playgroud)

将首先执行该date命令,并替换它的输出。

echo Today is Sat Dec 19 14:32:13 EST 2015
Run Code Online (Sandbox Code Playgroud)

然后执行以产生:

Today is Sat Dec 19 14:32:13 EST 2015
Run Code Online (Sandbox Code Playgroud)

所以,在你的命令下,

g++ sdlExample.cpp `sdl-config --cflags --libs` -o sdlExample
Run Code Online (Sandbox Code Playgroud)

shell首先会执行,

sdl-config --cflags --libs
Run Code Online (Sandbox Code Playgroud)

并替换其输出,

g++ sdlExample.cpp <output of the above command> -o sdlExample
Run Code Online (Sandbox Code Playgroud)

然后最后执行生成的命令行。

要查看命令替换后实际执行的内容,只需echo在前面添加即可。

echo g++ sdlExample.cpp `sdl-config --cflags --libs` -o sdlExample
Run Code Online (Sandbox Code Playgroud)

这将向您显示生成的命令行。

请注意,命令替换还有一种替代语法,当您有复杂的嵌套替换时,首选这种语法。

echo g++ sdlExample.cpp $(sdl-config --cflags --libs) -o sdlExample
Run Code Online (Sandbox Code Playgroud)

这是一种非常标准的技术,可以为库/框架生成正确的命令行选项,其中选项取决于安装等。在这种情况下,该sdl-config命令为包生成必要的编译器选项 (cflagslibs) sdl。您可以通过直接在命令行上执行它来尝试它还能做什么。

sdl-config --cflags --libs
Run Code Online (Sandbox Code Playgroud)

sdl-config手册页


小智 2

它只是输出适当的标志以传递给编译器,类似于 pkg-config 对其 .pc 文件(位于 /usr/lib/pkgconfig 中)所做的事情。