你能帮我解决与 Makefile 相关的问题吗(Linux,Cygwin)。我想使用 Makefile 制作二进制文件。 我目前正在进行一个关于 3d 重建的项目。我使用过 Linux(Ubuntu) 和 Cygwin(Windows)。 当我使用源代码中包含的 Makefile 时出现了一些问题。(我从网上收到)。我在命令行输入“make”,但出现与 Make 相关的错误。这是这些。
[类型1]
make[1]: Entering directory `/home/curtis/bundlersrc/lib/5point'
make[1]: Nothing to be done for `all'.
make[3]: Entering directory `/home/curtis/bundlersrc/lib/ann_1.1_char/src'
make[3]: Nothing to be done for `targets'.
make[1]: Entering directory `/home/curtis/bundlersrc/lib/imagelib'
make[1]: Nothing to be done for `all'.
[Type2]
BundlerApp.h:620:32: error: cannot call constructor ‘SkeletalApp::BundlerApp’ directly [-fpermissive]
BundlerApp::BundlerApp(); ^
BundlerApp.h:620:32: error: for a function-style cast, remove the redundant ‘::BundlerApp’ [-fpermissive]
BundlerApp.cpp: In member function ‘virtual void BundlerApp::ProcessOptions(int, char**)’:
[Type3]
make[1]: Leaving directory `/home/curtis/bundlersrc/src'
make: *** [default] Error 2
其中一个 Make 文件包含这些 shell 代码
LIB = lib5point.a
TARGET = $(LIB)
OBJS = 5point.o poly1.o poly3.o
CC=gcc
OPTFLAGS=-O3
OTHERFLAGS=-Wall
MATRIX_PATH=../matrix
IMAGELIB_PATH=../imagelib
CPPFLAGS = $(OTHERFLAGS) $(OPTFLAGS) -I$(MATRIX_PATH) -I$(IMAGELIB_PATH)
all: $(TARGET)
$(TARGET): $(OBJS)
ar r $@ $(OBJS)
cp $@ ..
clean:
rm -f $(TARGET) *.o *~
我不明白为什么会出现关于 (.a) 文件的错误。有什么问题吗?
顶级 Makefile 包含这些代码
ANN_TARGET = linux-g++-shared
OS = $(shell uname -o)
ifeq ($(OS), Cygwin)
ANN_TARGET = win32-g++-shared
endif
default:
# Make libraries
cd lib/5point; $(MAKE)
cd lib/ann_1.1_char; $(MAKE) $(ANN_TARGET)
cd lib/imagelib; $(MAKE)
cd lib/matrix; $(MAKE)
cd lib/sba-1.5; $(MAKE)
cd lib/sfm-driver; $(MAKE)
# Auxiliary libraries
cd lib/lapack; $(MAKE)
cd lib/minpack; $(MAKE)
cd lib/blas; $(MAKE)
cd lib/cblas; $(MAKE)
cd lib/f2c; $(MAKE)
# Main program
cd src; $(MAKE)
clean:
cd lib/5point; $(MAKE) clean
cd lib/ann_1.1_char; $(MAKE) clean
cd lib/imagelib; $(MAKE) clean
cd lib/matrix; $(MAKE) clean
cd lib/sba-1.5; $(MAKE) clean
cd lib/sfm-driver; $(MAKE) clean
cd lib/lapack; $(MAKE) clean
cd lib/minpack; $(MAKE) clean
cd lib/blas; $(MAKE) clean
cd lib/cblas; $(MAKE) clean
cd lib/f2c; $(MAKE) clean
cd src; $(MAKE) clean
rm -f bin/bundler bin/KeyMatchFull
rm -f lib/*.a`
感谢阅读我的问题,
最佳答案
所有这些都不是 make 错误。让我们看看我们有什么:
- make[1]: 无事可做
要成为一个有效的工具,请查看目标文件是否已经存在以及它们是否是最新的(最后修改时间)。如果您的所有目标都存在并且是最新的,则您不必运行指定的命令,make 将报告 Nothing to be done for $target
- make: *** [默认] 错误 2
这意味着发出的一个命令以代码 2 退出(它不是 0,因此被认为是失败)。要解决此问题,您必须查看命令 gcc。您在类型 2 中看到什么是错误的,一个编程错误,如果您不提供代码则不容易解决。
- 进入/离开目录$dir
这里也没什么可担心的。这只是一条信息消息,告诉您 make 当前正在做什么。
我觉得你的 Makefile 没问题。只需修复您的代码 (BundlerApp) 就可以了。仅通过查看 gcc 错误,也许这会有所帮助:C++ Cannot call constructor ' ' directly但正如我所说,没有实际代码,它只是猜测。
关于linux - 你能帮帮我吗,如何解决与在 Linux、Cygwin(Windows) 上工作的 (.a) 文件相关的 Makefile 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33804263/