C-fopen不';从makefile运行时无法正常工作

C-fopen不';从makefile运行时无法正常工作,c,makefile,fopen,C,Makefile,Fopen,我编写了一个简单的makefile来运行我的代码,因为我被要求作为一个可交付文件来运行 我在代码中使用fopen,当我从clion运行代码时,它通常会找到我需要的文件,但当我从makefile运行它时,它会告诉我它无法找到文件 (我的输出总是打印“找不到../a.txt”) -负责读取的函数(它正常运行,如果我在clion中运行它,它可以找到文件) 它存在于IO.c中 void readPar(char *f, int *para) { FILE *file = fopen(f, &qu

我编写了一个简单的makefile来运行我的代码,因为我被要求作为一个可交付文件来运行 我在代码中使用fopen,当我从clion运行代码时,它通常会找到我需要的文件,但当我从makefile运行它时,它会告诉我它无法找到文件 (我的输出总是打印“找不到../a.txt”)

-负责读取的函数(它正常运行,如果我在clion中运行它,它可以找到文件) 它存在于IO.c中

void readPar(char *f, int *para) {
    FILE *file = fopen(f, "r");
    if (file == NULL) {
        printf("Couldn't find %s\n", f);
        exit(-1);
    }
    fscanf(file, "row=%d col=%d", &para[0], &para[1]);
    fclose(file);
}
-我的main(称为matMultp.c)

如果您想要我的文件夹的ls:

 a.txt  b.txt  cmake-build-debug  CMakeLists.txt  

dockDockBuildParams.json  IO.c  IO.h  IO.o  IO.su  

makefile  matMultp  matMultp.c  matMultp.o  matMultp.su  

matUtils.c  matUtils.h  matUtils.o  matUtils.su  tests

试试这个,看看你是否明白了答案:

void readPar(char*f,int*para){
FILE*FILE=fopen(f,“r”);
if(file==NULL){
printf(“找不到%s/%s\n”,获取当前目录名称(),f);
出口(-1);
}
fscanf(文件,“行=%d列=%d”、¶[0]、¶[1]);
fclose(文件);
}

您可能还需要添加
#include

可能是因为用于执行的工作目录不同?我不明白您的意思,makefile在哪里运行
matMultp
?或者我误解了?它们都存在于同一个文件夹中,我只是键入make来构建它,然后运行它。/matMultp,然后它显示输出,我编辑了帖子以包含我文件夹的ls。你可以看到所有文件都存在于同一个文件中,包括.o文件,makefile和a.txtyes我知道现在clion和makefile有不同的工作目录和不同的可执行文件位置我会把makefile也放在debug build文件夹中,所以它们都有相同的一个,谢谢你把它放在另一个文件夹**这样它们就不会冲突,这个文件夹中已经存在属于clion的makefile和可执行文件:D
CC=gcc 
CFLAGS=-Wall -pthread -Wextra -g -Wstack-usage=1000 -fstack-usage
LDLIBS= -lpthread

all: matMultp
matMultp: matMultp.o matUtils.o IO.o
matMultp.o: matMultp.c 
matUtils.o : matUtils.c matUtils.h
IO.o : IO.c IO.h 
clean:
    rm -rf $(EXECUTABLE) $(OBJ)
 a.txt  b.txt  cmake-build-debug  CMakeLists.txt  

dockDockBuildParams.json  IO.c  IO.h  IO.o  IO.su  

makefile  matMultp  matMultp.c  matMultp.o  matMultp.su  

matUtils.c  matUtils.h  matUtils.o  matUtils.su  tests