【问题标题】:Makefile for linking opencv.framework (I'm not using cmake)用于链接 opencv.framework 的 Makefile(我没有使用 cmake)
【发布时间】:2018-06-07 10:00:27
【问题描述】:

我在我的项目中使用opencv,现在我使用makefile将项目编译成一个静态库,但总是输出'fatal error: 'cv.h' file not found'。我已经搜索过这个网站和其他地方,这不是我需要的。我只知道一点makefile语法。我该怎么办?

生成文件

LIBS_DIR = ./lib/
OBJS_DIR = ./obj/
DEPENDENT_DIR = ./dependent/

HEADER_PATH = -I./include -I./implement -I.
LIB_PATH = -L./lib

SRCDIRS := $(patsubst ./%, %, $(shell find . -type d))
SRCS_CXX := $(foreach dir, $(SRCDIRS), $(wildcard $(addprefix $(dir)\/*, .cpp)))

OBJS := $(SRCS_CXX:.cpp=.o)

%.o: %.cpp
  @echo "---------- .o begin ----------"
  $(CXX) -c $< $(HEADER_PATH)
  $(CXX) -o $@ $^ $(LIB_PATH)
  mv $@ $(OBJS_DIR)

%.d: %.cpp
  @echo "---------- dependent begin ----------"
  @set -e; \
  rm -f $@; \
  $(CXX) -MM $< > $@.tmp; \
  sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.tmp > $@; \
  rm -f $@.tmp
  mv $@ $(DEPENDENT_DIR)

-include $(DEPS)

.PHONY: clean

clean:
  rm -f obj/*.o lib/*.a dependent/*.d
  rm -rf SunWS_cache

在我的文件中

#include <cv.h>
#include <cxcore.h>
#include <highgui.h>

File directory

Used makefile

新错误

我将HEADER_PATH修改为HEADER_PATH = -I./include/opencv -I./include/opencv2 -I./implement -I.,但出现了一个新错误fatal error: 'opencv2/core/core_c.h' file not found。

我尝试添加一个新的子文件夹路径,如-I./include/opencv -I./include/opencv2 -I./include/opencv2/core -I./implement -I. 这个错误仍在输出,-I 命令不会自动找到子文件夹的路径?我做错什么了吗?

【问题讨论】:

    标签: c++ opencv makefile


    【解决方案1】:

    您的标题路径是HEADER_PATH = -I./include -I./implement -I.

    在附件中显示的include 文件夹中,您有两个子文件夹opencv 和opencv2。

    当包含cv.h 文件时直接包含而不包含子文件夹。 为了让编译器找到文件,您需要在 HEADER_PATH 上添加子文件夹,例如 HEADER_PATH = -I./include/opencv -I./include/opencv2 -I./implement 或者您需要#include &lt;opencv/cv.h&gt;,如果cv.h 直接在opencv 子文件夹内。

    附注:您在文件夹denpendent中有错字

    【讨论】:

    • 感谢您的回复。它对我有帮助,对于这个文件夹名称的拼写错误,我深表歉意。我修改HEADER_PATH后,又出现了一个新问题。问题在上面。
    • ./include/opencv2 是相对路径。这些路径与您调用 make 的目录相对。在this stack overflow answer 中,他们展示了一个根据调用 make 的文件夹更改路径的示例
    • 你说得对,再次感谢。我解决了这个错误,可能是我的源代码引起的新错误。
    【解决方案2】:

    终于解决了这个错误,编译成功了,我还是用CMake。但是在我用CMake成功编译后,我可以再次使用Makefile进行编译。我认为这是我自己的错误,@zomeck 的回答帮助了我。

    这是我的 CMakeLists.txt

    cmake_minimum_required(VERSION 3.2)
    
    project(library_name)
    
    add_definitions(-Wall)
    
    set(OPENCV_PATH ../sdk3/opencv3.0.0)
    set(OPENCL_PATH ../sdk3/opencl)
    
    link_directories(
        ${OPENCL_PATH}/bin
        ${OPENCV_PATH}
    )
    link_libraries(
        ${OPENCV_PATH}/opencv2.framework
        ${OPENCL_PATH}/bin/OpenCL.DLL
    )
    
    include_directories(
        ./
        ./implement
        ${OPENCV_PATH}/include
        ${OPENCV_PATH}/include/opencv
        ${OPENCL_PATH}/include/CL
    )
    
    set(SOURCES_FILES
        HS_Process.cpp
        implement/iclear/H_Proc.cpp
    )
    
    add_library(library_name STATIC ${SOURCES_FILES})
    
    target_link_libraries(library_name opencv2 OpenCL)
    

    @zomeck 回答后的新 Makefile

    # The following is modified
    SDK_PATH = ../sdk3
    OPENCL_PATH = ../sdk3/opencl
    OPENCV_PATH = ../sdk3/opencv3.0.0/include
    
    vpath = %.h implement : %.h $(OPENCV_PATH) : %.h $(OPENCV_PATH)/opencv : %.h $(OPENCL_PATH) : %.h $(CALCTIME_PATH)
    
    HEADER_PATH = \
    -I. \
    -I./implement \
    -I$(OPENCV_PATH) \
    -I$(OPENCV_PATH)/opencv \
    -I$(OPENCV_PATH)/opencv2 \
    -I$(OPENCL_PATH)/include/CL \
    
    %.o: %.cpp
        @echo "---------- .o begin ----------"
        $(CXX) $(CXXFLAGS) -c $(HEADER_PATH) $< -o $@
        mv $@ $(OBJS_DIR)
    

    【讨论】:

      猜你喜欢
      • 2018-06-11
      • 2011-07-20
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 2023-03-30
      相关资源
      最近更新 更多