使用makefile编译后出现"Permission denied"错误

3
当我尝试运行程序时,出现以下错误: bash:./supermarket:权限被拒绝。
可执行文件显示为二进制文件,用户具有读写权限,但没有执行权限。
这是我的Makefile代码,您能找出问题在哪里吗?
OBJS    = supermarket.o cashier.o customer.o 
SOURCE  = supermarket.c cashier.c customer.c 
HEADER  = struct.h
OUT     = supermarket cashier customer
CC  = gcc
FLAGS   = -lrt -g -c 

#LIBS   = -lm
# -g option enables debugging mode 
# -c flag generates object code for separate files
# -lm math library
# -lrt semaphores

all: supermarket cashier customer

supermarket: supermarket.c
    $(CC) $(FLAGS) supermarket.c -o supermarket 

cashier: cashier.c
    $(CC) $(FLAGS) cashier.c -o cashier 

customer: customer.c
    $(CC) $(FLAGS) customer.c -o customer

# clean house
clean:
    rm -f $(OBJS) $(OUT)
# do a bit of accounting
count:
    wc $(SOURCE) $(HEADER)
3个回答

6
FLAGS   = -lrt -g -c 

具体来说,是 -c 标志。它在对象阶段停止编译,因此您的 supermarketcashiercustomer "可执行文件" 实际上是没有其通常扩展名的对象文件。

我不明白,所以我们在创建目标文件时不应该使用-c扩展名? - SandBag_1996
@UnderDog 不,你应该在创建目标文件时使用 -c,这里的 OP 想要最终的可执行文件,而不是一个目标文件。 - Kevin

1

你正在编译和创建目标文件,而不是可执行文件。使用gcc的-c选项告诉它不要调用链接器。 我认为this是一个很好的最简单的make教程。


0

编译 *.c 程序,然后使用 gcc -o 进行链接并创建可执行文件。

或者使用 gcc -o ___ -c ____.c 一条命令完成所有操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接