如何在msys2下为mingw32-make指定包含和库位置?

时间:2016-11-07 01:09:16

标签: gcc mingw32 msys2

我有一套Windows程序,到目前为止我在msys下构建,其中一个使用libxml2。我目前正在尝试切换到msys2下构建它们,而后者正在遇到问题。我更新的Makefile包含以下内容:

CFLAGS  += -I/mingw32/include/libxml2

$(BINDIR)/%.o: %.c
    @-$(MKDIR) $(BINDIR)
    $(CC) $(CFLAGS) -c $*.c -o $@

但是当我运行make (mingw32-make)时,编译失败如下:

[csv-gen]: mingw32-make
gcc -std=c99 -Werror -Wall -D_XOPEN_SOURCE -O -I/mingw32/include/libxml2 -c xmlParse.c -o ../../bin/Win32/csv-gen/xmlParse.o
xmlParse.c:36:27: fatal error: libxml/parser.h: No such file or directory
 #include "libxml/parser.h"
                           ^
compilation terminated.
Makefile:66: recipe for target '../../bin/Win32/csv-gen/xmlParse.o' failed
mingw32-make: *** [../../bin/Win32/csv-gen/xmlParse.o] Error 1

然而,libxml/parser.h文件确实存在于-I选项给出的/mingw32/include/libxml2路径下:

[csv-gen]: ls /mingw32/include/libxml2/libxml/parser.h
/mingw32/include/libxml2/libxml/parser.h

奇怪的是,如果我直接从msys bash shell运行完全相同的gcc命令(从上面的make输出复制并粘贴它),那么它编译得很好没有错误。

我在链接阶段遇到完全相同的问题,它在libxml2.a给gcc的路径中找不到-L/mingw32/lib库,我再次运行gcc link命令直接来自shell,它工作正常。

那么为什么gcc的-I/mingw32/include/libxml2-L/mingw32/lib选项在通过mingw32-make运行时不起作用,但完全相同的选项可以直接从shell调用gcc?

我确实尝试将路径显式化为Windows路径(d:/msys64/mingw32/...)并尝试引用它们,但无济于事。

1 个答案:

答案 0 :(得分:0)

原来,答案是使用显式的Windows路径,正如我上面所说的那样,我已经尝试了,但是当我再次尝试时它起作用,所以我之前必须犯这样的错误。我通过使用pkg-config的输出找到了这个,它给出了:

[csv-gen]: pkg-config --cflags libxml-2.0
-ID:/msys64/mingw32/include/libxml2

显然问题是mingw32-make并不完全理解msys文件系统,或者至少没有/ mingw32和/ mingw64路径。