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

Gcc 如何在msys2下为mingw32 make指定包含和库位置?,gcc,mingw32,msys2,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)时,编译失败,如下所

我有一套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
奇怪的是,如果我直接从msysbashshell运行完全相同的gcc命令(从上面的make输出复制并粘贴它),那么它可以编译得很好,没有错误

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

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


我确实尝试过使用显式Windows路径(
d:/msys64/mingw32/…
)并尝试引用它们,但没有成功。

结果是,答案是使用显式Windows路径,正如我上面所说,我已经尝试过,但当我再次尝试时,它起到了作用,因此我以前一定犯过一些错误。我通过使用pkg config的输出发现了这一点,它给出:

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

很明显,问题是mingw32 make不完全理解msys归档系统,或者至少不理解其中的/mingw32和/mingw64路径。

结果是,答案是使用显式Windows路径,正如我上面所说,我已经尝试过了,但当我再次尝试时,它工作正常,所以我以前一定犯过一些错误。我通过使用pkg config的输出发现了这一点,它给出:

[csv-gen]: pkg-config --cflags libxml-2.0
-ID:/msys64/mingw32/include/libxml2
显然,问题在于mingw32 make不完全理解msys归档系统,或者至少不理解其中的/mingw32和/mingw64路径