UNIX - makefile, помогите! - PullRequest
       17

UNIX - makefile, помогите!

1 голос
/ 05 ноября 2010

Нужна помощь в компиляции моей программы ниже. Я получаю «*** Стоп. Нет целей». ошибка при вводе в limit.makefile в буфере компилятора. Идеи?

int main(int argc, char *argv[]) {
  struct rlimit limit;

  limit.rlim_cur = 60000;


limit.rlim_max = 60000;

if (setrlimit(RLIMIT_FSIZE, &limit) == -1){
    perror("Error preventing core dump, errno=%d\n", errno);
    exit(1);
  }

else {
    printf("The current core limit is %ll.\n", limit.rlim_cur);
    printf("The core max limit is %ll.\n", limit.rlim_max);
    exit(0);
  }

  if (getrlimit(RLIMIT_FSIZE, &limit) == -1){
    printf("getlimit() failed with errno=%d\n", errno);
    exit(1);
  }


}

Команда компиляции: make -k -f limit.makefile Это то, что я печатаю для буфера компилятора .... все равно получаю ошибку, хотя.

Makefile:

CC = /usr/bin/gcc
CFLAGS = -g -Wall -std=c99 -O2 -arch x86_64

Ответы [ 4 ]

2 голосов
/ 05 ноября 2010

Только что попробовал этот make -k -f myfile в пустом файле и получил вашу ошибку.

Если вы просто хотите, чтобы это работало

CC= /usr/bin/gcc 
CFLAGS = -g -Wall -std=c99 -O2 -arch x86_64



all: test.c
    $(CC) $(CFLAGS) test.c

Обратите внимание, что вкладка под всем должна быть "настоящей" вкладкой.

Я рекомендую вам ознакомиться с руководством по make-файлу или просто скомпилировать его из командной строки. gcc -g -Wall -std = c99 -O2 -arch x86_64 limit.c

Кстати, не уверен насчет этого флага -arch. Недопустимо в моей Linux-системе.

1 голос
/ 05 ноября 2010

EboMike более сложный, но вот более простой, который гарантированно будет работать для вашего однофайлового проекта:

CC = /usr/bin/gcc
CFLAGS = -g -Wall -std=c99 -O2 -arch x86_64

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

Вы можете запустить его только с make.

1 голос
/ 05 ноября 2010

Попробуйте

CC = /usr/bin/gcc
CFLAGS = -g -Wall -std=c99 -O2 -arch x86_64
OBJ = limit.o

%.o: %.c
    $(CC) -c -o $@ $< $(CFLAGS)
0 голосов
/ 05 ноября 2010

Вы нигде не определили, какую цель построить. Вы можете сделать это в командной строке, используя команду

make -k -f limit.makefile limit

и неявные правила make скомпилируют limit.c в limit. В качестве альтернативы определите цель в вашем make-файле,

CC = /usr/bin/gcc
CFLAGS = -g -Wall -std=c99 -O2 -arch x86_64
limit: limit.o

Первая цель будет создана по умолчанию, и make знает, как скомпилировать *.c в *.o и связать объектные файлы, чтобы все остальное было автоматическим.

Если вам интересно, правила по умолчанию эквивалентны (в GNU make)

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

, где $@, $< и $^ расширяются до цели, первого и всех предварительных требований соответственно, знаки процента являются подстановочными знаками для имени цели.

...