首页 > 解决方案 > 用于链接 opencv.framework 的 Makefile(我没有使用 cmake)

问题描述

我在我的项目中使用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>

文件目录

使用过的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++opencvmakefile

解决方案


最后,我解决了这个错误并编译成功,我仍然使用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)

推荐阅读