我正在尝试在Windows下使用cygwin作为构建环境。我有一些依赖于第三方包的依赖项,例如GTK+。
通常情况下,当我在Linux下进行构建时,在我的Makefile中,我可以添加一个对pkg-config的调用作为gcc的参数,这样它就会像这样出现:
gcc example.c `pkg-config --libs --cflags gtk+-2.0`
这在Linux下运行良好,但在cygwin下我得到如下错误:
:Invalid argument make: *** [example] Error 1
目前,我只能手动运行pkg-config并将输出粘贴到Makefile中,这真是太糟糕了。有没有好的方法来解决或修复这个问题?
Make不是罪魁祸首。我可以复制并粘贴用于调用gcc的命令行,那样本身就会运行gcc,但会停止并显示“:无效参数”。
我编写了一个小测试程序来打印命令行参数:
注意单引号。
说到这里,有没有什么办法可以让Makefile将pkg-config的结果存储到一个变量中,然后使用该变量,而不是使用反引号运算符?
通常情况下,当我在Linux下进行构建时,在我的Makefile中,我可以添加一个对pkg-config的调用作为gcc的参数,这样它就会像这样出现:
gcc example.c `pkg-config --libs --cflags gtk+-2.0`
这在Linux下运行良好,但在cygwin下我得到如下错误:
:Invalid argument make: *** [example] Error 1
目前,我只能手动运行pkg-config并将输出粘贴到Makefile中,这真是太糟糕了。有没有好的方法来解决或修复这个问题?
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' '-lintl' '注意最后一行有一个单引号。看起来argc比它应该的多一个,而argv[argc-1]为null。在Linux上运行相同的测试没有这个结果。
说到这里,有没有什么办法可以让Makefile将pkg-config的结果存储到一个变量中,然后使用该变量,而不是使用反引号运算符?