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

编写Makefile调用PRIMME与SLEPc库报错:clean目标重复定义

解决Makefile中clean目标冲突的问题

问题原因

报错Makefile:36: *** target file 'clean' has both : and :: entries. Stop.的核心原因是:你引入的slepc_common配置文件里已经定义了clean::双冒号规则,而自己的Makefile中又写了clean:单冒号规则,Make不允许同一个目标同时存在单冒号和双冒号的规则定义。

解决方案

直接把自己的clean规则改成双冒号格式,就能和slepc_common里的规则合并执行,不会冲突。

修改后的完整Makefile

# Compiler
CC = gcc

# Directories
SLEPC_DIR = /home/student/Documents/projet/codeProjet17SLEPc/CodePub/slepc-3.20.1
PRIMME_DIR = /home/student/Documents/projet/codeProjet17SLEPc/CodePub/primme

# SLEPc settings
include ${SLEPC_DIR}/lib/slepc/conf/slepc_common

# PRIMME settings
PRIMME_LIB = -L${PRIMME_DIR} -lprimme
PRIMME_INC = -I${PRIMME_DIR}/PRIMMESRC/COMMONSRC

# Compiler flags
CFLAGS = -g -Wall $(SLEPC_CCFLAGS) $(PRIMME_INC)

# Linker flags
LDFLAGS = $(SLEPC_EPS_LIB) $(PRIMME_LIB) -lm -lblas -llapack

# Targets
TARGET = executable
SOURCES = main.c prob.c time.c interface_primme.c graph.c res.c temp.c diff.c
OBJECTS = $(SOURCES:.c=.o)

# Build rules
all: $(TARGET)

$(TARGET): $(OBJECTS)
    $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)

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

clean::
    rm -f $(OBJECTS) $(TARGET)

关键修改点

  • 将clean:改为clean::,匹配slepc_common中的规则格式,解决冲突
  • 把PRIMME_INC合并到CFLAGS中,简化编译命令
  • 将PRIMME_LIB移到LDFLAGS里,统一管理链接参数
  • 移除重复的SLEPC_INC,因为slepc_common已经通过SLEPC_CCFLAGS包含了必要的头文件路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:50:20