我正在尝试使用 cygwin 作为 Windows 下的构建环境。我对 3rd 方包有一些依赖关系,例如 GTK+。
通常,当我在 Linux 下构建时,在我的 Makefile 中,我可以添加对 pkg-config 的调用作为 gcc 的参数,所以结果如下:
gcc example.c `pkg-config --libs --cflags gtk+-2.0`
这在 Linux 下运行良好,但在 cygwin 中我得到:
:无效的论点 make: *** [示例] 错误 1
现在,我只是手动运行 pkg-config 并将输出粘贴到 Makefile 中,这真的很糟糕。有没有解决或解决此问题的好方法?
Make不是罪魁祸首。我可以复制并粘贴 make 用来调用 gcc 的命令行,它本身将运行 gcc,它会因“:无效参数”而停止。
我写了一个小测试程序来打印命令行参数:
for (i = 0; i < argc; i++)
printf("'%s'\n", argv[i]);
注意单引号。
$ pkg-config --libs gtk+-2.0 -Lc:/mingw/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpang owin32-1.0 -lgdi32 -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule- 2.0 -lglib-2.0 -lintl
运行测试程序:
$ ./t `pkg-config --libs gtk+-2.0` 'C:\cygwin\home\smo\pvm\src\t.exe' '-Lc:/mingw/lib' '-lgtk-win32-2.0' '-lgdk-win32-2.0' '-latk-1.0' '-lgdk_pixbuf-2.0' '-lpangowin32-1.0' '-lgdi32' '-lpangocairo-1.0' '-lpango-1.0' '-lcairo' '-lgobject-2.0' '-lgmodule-2.0' '-lglib-2.0' '-lint' '
注意最后一行的单引号。看起来 argc 比它应该的大一,并且 argv[argc - 1] 为空。在 Linux 上运行相同的测试没有这个结果。
也就是说,是否有某种方式可以让 Makefile 将 pkg-config 的结果存储到一个变量中,然后使用该变量,而不是使用反引号运算符?