c++ -/usr/bin/ld : cannot open output file bin/genericMatching: No such file or directory

标签 c++ makefile

我正在尝试在 ubuntu 中使用 makefile 编译我的 c++ 程序但是有一个我无法理解的错误。这是我收到的错误消息。

 Parallel/ParallelSlave.o Parallel/IOHandler.o commons/File19794.o  -o    bin/genericMatching 
/usr/bin/ld: cannot open output file bin/genericMatching: No such file or directory
collect2: error: ld returned 1 exit status
Makefile:38: recipe for target 'bin/genericMatching' failed

这是我的 Makefile 中的代码,我的程序文件夹中没有 bin 文件/目录:

# The compiler to use.
CC = mpiCC

# Directories for Includes and Common clases
IDIR =include
CDIR =commons/
JIANGDIR =MatcherJiang/
MCCDIR =MCC/
PDIR =Parallel/
BINDIR =bin/

# Compiler options -Weffc++
CFLAGS= -Wall -O2 -fopenmp -I$(IDIR) -I$(JIANGDIR) -I$(MCCDIR)

# Sources and Common clases sources
SOURCES= $(PDIR)genericMatching.cpp
SOURCESD= $(PDIR)DPDDFF.cpp
CSOURCES= $(CDIR)Fingerprint.cpp $(CDIR)Score.cpp $(JIANGDIR)FingerprintJiang.cpp  $(MCCDIR)MCC.cpp $(MCCDIR)Cylinder.cpp  $(CDIR)Functions.cpp $(CDIR)Minutia.cpp $(CDIR)GrahamScanConvexHull.cpp $(CDIR)Munkres.cpp $(PDIR)ParallelHandler.cpp $(PDIR)ParallelMaster.cpp $(PDIR)ParallelSlave.cpp $(PDIR)IOHandler.cpp $(CDIR)File19794.cpp


# Objects
OBJECTS=$(SOURCES:.cpp=.o)
OBJECTSD=$(SOURCESD:.cpp=.o)
COBJECTS=$(CSOURCES:.cpp=.o)

# Name of the executable
EXECUTABLE=$(BINDIR)genericMatching
EXECUTABLED=$(BINDIR)DPDDFF

all: $(EXECUTABLE) $(EXECUTABLED)

.PHONY: doc

doc:
    doxygen Doxyfile

$(EXECUTABLE): $(OBJECTS) $(COBJECTS)
    $(CC) $(CFLAGS) $(OBJECTS) $(COBJECTS) $(OBJECTFILES) -o $@ $(LDFLAGS)

$(EXECUTABLED): $(OBJECTSD) $(COBJECTS)
    $(CC) $(CFLAGS) $(OBJECTSD) $(COBJECTS) $(OBJECTFILES) -o $@ $(LDFLAGS)

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

clean:
    rm -f $(OBJECTS) $(OBJECTSD) $(COBJECTS) $(EXECUTABLE) $(EXECUTABLED)

mrproper: clean
    rm -r doc/latex doc/html

最佳答案

运行这条规则时:

$(EXECUTABLE): $(OBJECTS) $(COBJECTS)
    $(CC) $(CFLAGS) $(OBJECTS) $(COBJECTS) $(OBJECTFILES) -o $@ $(LDFLAGS)

它将隐式运行ld 来创建$(EXECUTABLE),即bin/genericMatching。因为bin目录不存在,报错。我建议添加:

$(EXECUTABLE) $(EXECUTABLED): | $(BIN)

$(BIN) :
    mkdir -p $@

到你的makefile。 Make 将在构建可执行文件之前生成目录。请注意 | 使其成为 order-only先决条件,这意味着它不会重建 $(EXECUTABLE)$(EXECUTABLED) 如果 $(BIN) 比任一目标更新。

关于c++ -/usr/bin/ld : cannot open output file bin/genericMatching: No such file or directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43877411/

相关文章:

c++ - 反向offsetof/通过offset获取元素名称

c++ - 在构造函数中初始化字符串成员的首选方法是什么?

c++ - 生成文件语法错误。缺少分隔符

c++ - GNU 使 : How to add an option in front of every entry of a list

objective-c - 从 Notepad++ 自动化 GNUStep

c++ - 从 catch (...) C++ 获取异常对象地址

c++ - 使用条件 if else 运算符初始化引用变量

java - 使文件丢失,Eclipse

c - 完全相同的命令行在 Make 中产生错误,但如果从 shell 运行则成功

c++ - 如何在控制台中制作进度条?