UNIX - makefile 帮助!

问题描述 投票:0回答:4

寻求帮助编译下面的程序。我收到一条“***停止。没有目标”。在编译器缓冲区中输入 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
这是我为编译器缓冲区输入的内容......但仍然收到错误。

生成文件:

CC = /usr/bin/gcc
CFLAGS = -g -Wall -std=c99 -O2 -arch x86_64
c unix makefile
4个回答
2
投票

刚刚尝试在空文件上执行 make -k -f myfile 并收到错误。

如果你只是想让它发挥作用

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



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

请注意,all 下的选项卡必须是“真实”选项卡。

我建议您查看 makefile 教程或直接从命令行编译它。 gcc -g -Wall -std=c99 -O2 -arch x86_64 limit.c

顺便说一句,不确定 -arch 标志。 在我的 Linux 机器上无效。


1
投票

尝试

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

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

1
投票

EboMike 的更复杂,但这里有一个更简单的,保证适用于您的单文件项目:

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

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

您只需使用

make
即可运行此程序。


0
投票

您还没有在任何地方定义要构建的目标。您可以使用以下命令在命令行上执行此操作

make -k -f limit.makefile limit

并且

make
的隐式规则会将
limit.c
编译为
limit
。或者在你的 makefile 中定义一个目标,

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)

其中

$@
$<
$^
分别扩展到目标、第一个先决条件和所有先决条件,百分号是目标名称的通配符。

© www.soinside.com 2019 - 2024. All rights reserved.