Opencv Makefile中的订单

Opencv Makefile中的订单,opencv,makefile,Opencv,Makefile,我正在尝试在ubuntu 14.04上为opencv文件编写makefile 下面是一个例子: 如果我尝试以以下形式使用它: CFLAGS = `pkg-config --cflags opencv` LIBS = `pkg-config --libs opencv` % : %.cpp g++ $(CFLAGS) $(LIBS) -o $@ $< 我明白了 为什么标准makefile示例对我不起作用?我们应该在makefile中使用的libs、include和*.c

我正在尝试在ubuntu 14.04上为opencv文件编写makefile

下面是一个例子:

如果我尝试以以下形式使用它:

CFLAGS = `pkg-config --cflags opencv`
LIBS = `pkg-config --libs opencv`

% : %.cpp
        g++ $(CFLAGS) $(LIBS) -o $@ $<
我明白了


为什么标准makefile示例对我不起作用?我们应该在makefile中使用的libs、include和*.cpp的顺序是什么?

您需要
cxflags
而不是
CFLAGS
LDFLAGS
而不是
libs
。看

您的整个Makefile可能是

CXXFLAGS = `pkg-config --cflags opencv`
LDFLAGS = `pkg-config --libs opencv`

all: minimal

他正在使用他正在设置的旗帜。这不是问题所在。@EtanReisner我以为他是在问为什么标准makefile对他不起作用。我读到这句话的时候是在问为什么第一个简单的示例makefile不起作用。不过,您使用内置规则的建议很好。@EtanReisner:)您可能是对的!我看你已经在这里呆了一段时间了。我一直想问某人这个问题。在这种情况下,我是否应该删除我的答案,因为它不能回答问题?你可以这样做,但可能值得解释一下,make有内置的规则,对于简单的使用,makefile可以像你展示的那样简单。在我看来,这是对“如何让一个简单的makefile在opencv上运行”这一“元”问题的有效回答。您列出的第一个makefile没有明确的目标,因此make在运行
make
时不知道要构建什么。在有
somefile.cpp的地方运行
makesomefile
,它就会工作。在命令行上看到库时,会搜索它们一次。所以他们需要寻找任何使用它们的东西。
g++ `pkg-config --cflags opencv` `pkg-config --libs opencv` -o minimal minimal.cpp
/tmp/ccKWVtBh.o: In function `main':
minimal.cpp:(.text+0x4d): undefined reference to `cv::imread(std::string const&, int)'
minimal.cpp:(.text+0x123): undefined reference to `cv::imwrite(std::string const&, cv::_InputArray const&, std::vector<int, std::allocator<int> > const&)'
minimal.cpp:(.text+0x1a6): undefined reference to `cv::imshow(std::string const&, cv::_InputArray const&)'
minimal.cpp:(.text+0x1ce): undefined reference to `cv::waitKey(int)'
/tmp/ccKWVtBh.o: In function `cv::Mat::~Mat()':
minimal.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x39): undefined reference to `cv::fastFree(void*)'
/tmp/ccKWVtBh.o: In function `cv::Mat::operator=(cv::Mat const&)':
minimal.cpp:(.text._ZN2cv3MataSERKS0_[_ZN2cv3MataSERKS0_]+0x111): undefined reference to `cv::Mat::copySize(cv::Mat const&)'
/tmp/ccKWVtBh.o: In function `cv::Mat::release()':
minimal.cpp:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x47): undefined reference to `cv::Mat::deallocate()'
/tmp/ccKWVtBh.o: In function `cv::_InputArray::_InputArray<unsigned char>(cv::Mat_<unsigned char> const&)':
minimal.cpp:(.text._ZN2cv11_InputArrayC2IhEERKNS_4Mat_IT_EE[_ZN2cv11_InputArrayC5IhEERKNS_4Mat_IT_EE]+0x17): undefined reference to `vtable for cv::_InputArray'
/tmp/ccKWVtBh.o: In function `cv::Mat_<unsigned char>::operator=(cv::Mat const&)':
minimal.cpp:(.text._ZN2cv4Mat_IhEaSERKNS_3MatE[_ZN2cv4Mat_IhEaSERKNS_3MatE]+0x77): undefined reference to `cv::Mat::reshape(int, int, int const*) const'
minimal.cpp:(.text._ZN2cv4Mat_IhEaSERKNS_3MatE[_ZN2cv4Mat_IhEaSERKNS_3MatE]+0xdd): undefined reference to `cv::Mat::convertTo(cv::_OutputArray const&, int, double, double) const'
/tmp/ccKWVtBh.o: In function `cv::_OutputArray::_OutputArray<unsigned char>(cv::Mat_<unsigned char>&)':
minimal.cpp:(.text._ZN2cv12_OutputArrayC2IhEERNS_4Mat_IT_EE[_ZN2cv12_OutputArrayC5IhEERNS_4Mat_IT_EE]+0x2a): undefined reference to `vtable for cv::_OutputArray'
collect2: error: ld returned 1 exit status
make: *** [minimal] Error 1
IFLAGS = `pkg-config --cflags opencv`
LFLAGS = `pkg-config --libs opencv`

all: minimal

minimal: minimal.cpp
    g++ $(IFLAGS) -o minimal minimal.cpp $(LFLAGS)
CXXFLAGS = `pkg-config --cflags opencv`
LDFLAGS = `pkg-config --libs opencv`

all: minimal