【发布时间】:2010-09-11 05:37:00
【问题描述】:
我正在尝试使用 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 的结果存储到一个变量中,然后使用该变量,而不是使用反引号运算符?
【问题讨论】:
-
我也在 Win 64 系统 (Vista64) 上并在同一点上苦苦挣扎。我注意到 thadt 32 和 64 位 GTK 安装会混淆 pkg-config 并且未正确确定 lib 路径。我现在正在寻找一个非 pkg-config 解决方案,所以我可以更好地了解链接器进程到底发生了什么。
标签: windows bash cygwin makefile pkg-config