Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用makefile编译C项目_C_Linux_Compilation_Compiler Errors_Makefile - Fatal编程技术网

用makefile编译C项目

用makefile编译C项目,c,linux,compilation,compiler-errors,makefile,C,Linux,Compilation,Compiler Errors,Makefile,我有一个名为可靠性的目录: ls reliability analyze.c appl.sh constr.c creer.c greedys.c Makefile 现在我想安装并编译它: 首先,Makefile的内容是: CC = gcc CFLAGS = -g -Wall -pthread SRCS = constr.c creer.c analyze.c greedys.c PROG = constr creer analyze greedys all: $(PROG)

我有一个名为可靠性的目录:

ls reliability
analyze.c  appl.sh  constr.c  creer.c  greedys.c  Makefile
现在我想安装并编译它:

首先,Makefile的内容是:

CC = gcc
CFLAGS = -g -Wall -pthread

SRCS = constr.c creer.c analyze.c greedys.c
PROG = constr creer analyze greedys

all: $(PROG)

constr: constr.c
        $(CC) $(CFLAGS) -o constr constr.c

creer: creer.c
        $(CC) $(CFLAGS) -o creer creer.c

analyze: analyze.c
        $(CC) $(CFLAGS) -o analyze analyze.c

greedys: greedys.c
        $(CC) $(CFLAGS) -o greedys greedys.c

clean: 
        rm -f $(PROG)
当我开始编译它时:

make -f Makefile 
出现以下错误:

gcc -g -Wall -pthread -o constr constr.c
/tmp/cca4NKQl.o: In function `main':
/home/t1/Desktop/reliability/constr.c:89: undefined reference to `exp'
/home/t1/Desktop/reliability/constr.c:89: undefined reference to `exp'
/home/t1/Desktop/reliability/constr.c:89: undefined reference to `pow'
/home/t1/Desktop/reliability/constr.c:89: undefined reference to `log'
collect2: ld returned 1 exit status
make: *** [constr] Error 1
我通过向gcc添加
-lm
来传递这些错误

即使当我将
CFLAGS
Makefile
更改为
CFLAGS=-g-Wall-pthread-lm
时,也存在该错误

我的问题:

我现在应该单独编译所有
.c
程序吗

谢谢你我真的需要帮助

更新 编译
creer.c
时出现错误:

creer.c:39:10: warning: unused variable ‘val2’ [-Wunused-variable] creer.c:38:7:
               warning: unused variable ‘val’ [-Wunused-variable]
creer.c
的一部分是:

void values(){
  int val;
  double val2;
  FILE *fp;
  fp = fopen("instances","r");
  fseek(fp,0,SEEK_SET);
  if(fscanf(fp,"%d",&p)==EOF){printf("EOF\n");}
  if(fscanf(fp,"%d",&m)==EOF){printf("EOF\n");}
  if(fscanf(fp,"%d",&K)==EOF){printf("EOF\n");}
  if(fscanf(fp,"%lf",&lambda_com)==EOF){printf("EOF\n");}
  if(fscanf(fp,"%d",&num_inst)==EOF){printf("EOF\n");}
  if(fscanf(fp,"%d",&boundl)==EOF){printf("EOF\n");}
  if(fscanf(fp,"%d",&boundp)==EOF){printf("EOF\n");}
  fclose(fp);
}

您需要将链接器选项
-lm
添加到命令行的末尾

这样做:

LDFLAGS=-lm

...

constr: constr.c    
        $(CC) $(CFLAGS) -o constr constr.c $(LDFLAGS)
或者您可以定义一个模式规则:

%: %.c
        $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)
%:%
$(CC)$(CFLAGS)-o$@$<$(LDFLAGS)

并用它来替换constr、creer等的所有规则。

在将CFLAGS放入Makefile之前,让compile命令在命令行上运行。您能给我解释一下吗?我没有明白,感谢谷歌对“exp”数学的未定义引用。h揭示了它可能与Yes的重复:
#include#include#include#include#include#include#include
有关于未使用变量的警告。不是错误。对于第一个解决方案…只需添加第一行并添加
$(LDFLAGS)
就足够了,你认为吗?我真的很感谢。。。还有一个问题,这个错误对运行应用程序至关重要吗?(
creer.c:39:10:warning:unused variable'val2'[-Wunused variable]creer.c:38:7:warning:unused variable'val'[-Wunused variable])
@MortezaLSC这些未使用的变量不应导致任何运行时问题。