You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何每次执行make时都会自动运行make install命令?

问题分析与解决

你的Makefile内容

ifeq ($(PREFIX),)
    PREFIX := /usr
endif

install: libriscy.so.1.0
    install -d $(DESTDIR)$(PREFIX)/lib/
    install -m 755 libriscy.so.1.0 $(DESTDIR)$(PREFIX)/lib/
    ln -s $(DESTDIR)$(PREFIX)/lib/libriscy.so.1.0 $(DESTDIR)$(PREFIX)/lib/libriscy.so
libriscy.so.1.0: riscy.o riscyA.o riscyinit.o
    ld -fpic --shared -o libriscy.so.1.0 riscy.o riscyA.o riscyinit.o -lc -ldl
riscy.o: riscy.c riscyvar.S
    gcc -c -fPIC riscy.c -o riscy.o
riscyA.o: riscy.S riscyvar.S
    as -c -fpic riscy.S -o riscyA.o
riscyinit.o: riscyinit.c
    gcc -c -g -fpic riscyinit.c -o riscyinit.o

当前目录状态

adrian@starfive:~/riscyforth/riscylib$ ls -l
total 112
-rwxr-xr-x 1 adrian adrian 25680 Aug 25 18:16 libriscy.so.1.0
-rw-r--r-- 1 adrian adrian   558 Aug 25 18:05 makefile
-rw-r--r-- 1 adrian adrian 22426 Aug 24 17:41 riscy.S
-rw-r--r-- 1 adrian adrian  3549 Aug 24 17:41 riscy.c
-rw-r--r-- 1 adrian adrian  9560 Aug 24 17:54 riscy.o
-rw-r--r-- 1 adrian adrian 13440 Aug 24 17:54 riscyA.o
-rw-r--r-- 1 adrian adrian  1601 Aug 24 17:41 riscyinit.c
-rw-r--r-- 1 adrian adrian 15520 Aug 24 17:54 riscyinit.o
-rw-r--r-- 1 adrian adrian  1561 Aug 24 17:41 riscyvar.S

原因

Make的默认行为是执行Makefile里第一个出现的目标。你的Makefile里第一个目标是install,而install既不是声明的伪目标,当前目录下也没有名为install的文件或目录——Make会认为这个目标需要被生成,哪怕它的依赖libriscy.so.1.0已经存在,只要目标本身不存在,就会执行对应的命令。

解决方法

有两种常见的修复方式:

1. 把install声明为伪目标

在Makefile合适位置添加:

.PHONY: install

这样Make就不会去检查是否存在install文件,只有当你显式执行make install时才会运行这个目标的命令,默认执行make时会跳过它,转而执行后续的第一个实际文件目标(也就是libriscy.so.1.0)。

2. 添加默认目标all

在Makefile最开头添加一个all目标,让它成为第一个目标,依赖你默认想构建的文件:

all: libriscy.so.1.0

ifeq ($(PREFIX),)
    PREFIX := /usr
endif

# 后面的内容不变...

这样默认执行make时,只会构建libriscy.so.1.0(如果它或它的依赖有更新的话),而install目标只有你显式运行make install时才会执行。

内容的提问来源于stack exchange,提问作者adrianmcmenamin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 13:50:06