仅在使用makefile时发生Gcc错误(CreateProcess:无此类文件或目录)

仅在使用makefile时发生Gcc错误(CreateProcess:无此类文件或目录),gcc,makefile,createprocess,gsl,Gcc,Makefile,Createprocess,Gsl,我在使用windows 7中的make与gcc和gsl库进行编译时遇到问题。它仅在使用make时发生(当我在cmd行中手动键入编译命令时,它会正确编译)。我在一些帖子中发现,人们在gcc中有类似的错误,但没有一个帖子在正常输入时有效,但在使用make时无效。我的Makefile的内容如下所示: #Compiler COMP=gcc # Compiler Flags. -Wall turns on all warnings FLAGS=-Wall # GSL include file dir I

我在使用windows 7中的make与gcc和gsl库进行编译时遇到问题。它仅在使用make时发生(当我在cmd行中手动键入编译命令时,它会正确编译)。我在一些帖子中发现,人们在gcc中有类似的错误,但没有一个帖子在正常输入时有效,但在使用make时无效。我的Makefile的内容如下所示:

#Compiler
COMP=gcc
# Compiler Flags.  -Wall turns on all warnings
FLAGS=-Wall
# GSL include file dir
INCLUDES=GnuWin32/include
# GSL Libraries directory
LIB=GnuWin32/lib
# Library Flags
LFLAGS=-lgsl -lgslcblas -lm
# Target Program
EXE=ex2.1.exe
# Dependencies needed for $(PROGRAM)
OBJ=ex2.1.o
# List of source files for objects
SRC=ex2.1.c
# List with types of files to be cleared by clean:
TRASH=*.exe *.o
# I/O files to be cleaned with 'very clean' target
#IOFILES= *.dat *.out *.csv *.mod

all: $(SRC) $(EXE)

$(EXE): $(OBJ)
    $(COMP) -L/$(LIB) $(OBJ) $(LFLAGS) -o $(EXE)

$(OBJ): $(SRC)
    $(COMP) -I/GnuWin32/include -c ex2.1.c
    #$(COMP) -I/$(INCLUDES) -c $(SRC)

clean:
    del $(TRASH)
如果在目录中仅存在ex2.1.c的情况下键入make,则会得到以下输出和错误:

gcc -I/GnuWin32/include -c ex2.1.c
gcc: error: CreateProcess : No such file or directory
make: *** [ex2.1.o] Error 1
但是,如果我首先键入“gcc-I/GnuWiun32/include-cex2.1.c”,那么将成功创建ex2.1.o,并且没有错误。如果然后键入“make”,我将得到以下输出/错误:

gcc -L/GnuWin32/lib ex2.1.o -lgsl -lgslcblas -lm -o ex2.1.exe
gcc: fatal error: -fuse-linker-plugin, but liblto_plugin-0.dll not found
compilation terminated
make: *** [ex2.1.exe] Error 1

但是,如果我手动输入“gcc-L/GnuWin32/lib ex2.1.o-lgsl-lgslcblas-lm-o ex2.1.exe”,那么可执行文件会像应该的那样编译和运行,所以问题似乎在于make如何调用gcc?我的PATH变量包含make.exe和gcc.exe的路径,因此我不确定哪些设置不正确。有人知道什么地方可能出了问题吗?谢谢。

也许有帮助?我不清楚您是在MSYS shell还是在常规DOS shell中运行。谢谢,但该链接没有太大帮助,因为我使用的是常规DOS shell,并且我没有在gcc目录中移动任何内容。我甚至尝试将gcc.exe的副本添加到我试图编译的文件夹中,但它仍然说找不到它。请尝试以下操作:在DOS shell中,键入
where gcc
,然后发布结果。然后在makefile中,添加
$(info where gcc=$(shell where gcc))
并捕获输出。该命令应提供有关make使用的shell是否可以找到
gcc
,以及在何处的信息。@ReinierTorenbeek当我在DOS shell中键入“where gcc”时,我得到:C:\Python27\Scripts\gcc.exe C:\MingGW\bin\gcc.exe C:\Program Files\gfortran\bin\gcc.exe C:\MinGW\msys\1.0\bin\gcc.exe在将该命令添加到我的makefile中并输入“make”后,我得到:其中gcc=C:\Python27\Scripts\gcc.exe C:\MinGW\bin\gcc.exe C:\Program Files\gfortran\bin\gcc.exeC:\MinGW\msys\1.0\bin\gcc.exe,我也收到了原始帖子中提到的第一个错误。在我看来,make使用的shell似乎看到了到gcc的相同路径,不是吗?嗯,看起来它们确实看到了相同的路径,但我有点惊讶,它首先发现了多个
gcc
s。我将尝试进行测试,以验证哪个
gcc
s在DOS shell中适用,然后将
gcc
及其在makefile中的完整路径硬编码,例如
COMP:=C:\Python27\Scripts\gcc.exe
,然后再次运行
make