C编程在linux中的Makefile

时间:2014-04-23 21:31:22

标签: c linux makefile

任何人都可以告诉我因为我不确定有什么问题我认为我在Makefile中做错了什么不能运行它我得到错误

方案:drevoProcesov.c`

#include <sys/types.h>`  
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>`

void izpis()
{
printf("PID: %d  PPID: %d \n", getpid(), getppid());
}

int main(int argc, char *argv[])
{
    /*levo*/
    if(fork()==0)
    {
            if(fork()==0)
            {
                    if(fork()==0)
                    {
                            izpis();
                            exit(0);                       
                    }              
                    else
                    {
                            wait(0);       
                            izpis();                       
                    }
                    exit(0);
            }
            else
            {
                    wait(0);
                    wait(0);
                    wait(0);
                    izpis();
            }
    }      
    /*desno*/
    else
    {
            wait(0);
            if(fork()==0)
            {  
                    if(fork()==0)
                    {
                            izpis();
                            exit(0);
                    }
                    else
                    {
                            wait(0);
                            if(fork()==0)
                            {
                                    izpis();
                                    exit(0);
                            }
                            else
                            {
                                    wait(0);
                                    if(fork()==0)
                                    {
                                            izpis();
                                            exit(0);
                                    }
                                    else
                                    {
                                            wait(0);
                                            izpis();
                                    }
                            }
                    }
                    exit(0);
            }
            else
            {
                    wait(0);
                    izpis();
            }
    }
    return 0;

}

MAKEFILE

CC=gcc
LDFLAGS=-lm -g3 -lpthread -Wall
TARGET=drevoProcesov
all: $(TARGET)

clean:
rm -rf $(TARGET)
rm -rf *.o

这是我得到的错误:drevoProcesov.c

./drevoProcesov.c: line 7: syntax error near unexpected token `('
./drevoProcesov.c: line 7: `void izpis()'

PROGRAM 2 vsotast.c

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>

int *vsota;

int main(int argc,char *argv[]) {

if (argc != 2) {
  printf("Napaka v podajanju argumentov!\nPrimer: ./vsotast 5\n");
  return -1;
}

int n = atoi(argv[1]);

vsota = (int *)malloc(sizeof(int));
*vsota = 0;

int ret;
for (int i=0; i<n; i++)
{
  ret = fork();
  if (ret== 0) {
     *vsota = (*vsota + (i+1));

     //printf("VSOTA: %d; I+1: %d\n",*vsota, i+1);

     /*if (i == n-1)
        printf("Vsota, ki so jo izračunali sinovi: %d\n", *vsota);*/

     exit(0);
  } else {
     wait(&ret);
  }      
}

int sum = ((n*(1+n))/(2));

printf("Vsota, ki so jo izračunali sinovi: %d\n", *vsota);
printf("Vsota, ki jo izračunal oce: %d\n",sum);

free(vsota);

return 0;
}

MAKEFILE 2

CC = gcc
LDFLAGS = -lm -g3 -lpthread -Wall
CFLAGS = -g
TARGET = vsotast

all: $(TARGET)

clean:
rm -rf $(TARGET)
rm -rf *.o

这是我得到的错误:vsotast.c

gcc -g  -lm -g3 -lpthread -Wall  vsotast.c   -o vsotast
vsotast.c: In function ‘main’:
vsotast.c:22:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
for (int i=0; i<n; i++)
^
vsotast.c:22:4: note: use option -std=c99 or -std=gnu99 to compile your code

2 个答案:

答案 0 :(得分:1)

vsotast.c错误是由于在C99之前的for循环表达式中不允许声明,因此您需要启用C99模式或将声明移出{{ 1}}表达式:

for

答案 1 :(得分:0)

不是一个完整的答案,只是(更长)的想法:

  1. 正确缩进Makefile。这对他们来说至关重要。
  2. 编译器错误几乎没有w / Makefile - 如果编译器运行,那么你创建了一个或多或少正确的Makefile,问题在你的代码中:)
  3. 在这种特殊情况下,有问题的字符串是

    for (int i=0; i<n; i++)
    

    它是C,而不是C ++,并且你不能在for语句中声明循环变量,除非你将-std=c99标志传递给编译器(在CFLAGS中使用Makefile为此<) / p>