Gcc 如何在msys2下为mingw32 make指定包含和库位置?
我有一套Windows程序,到目前为止,我是在msys下开发的,其中一个使用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)时,编译失败,如下所
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路径