c++ - 用于链接 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>
新错误
我修改了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
命令不会自动找到子文件夹的路径?我做错什么了吗?
解决方案
最后,我解决了这个错误并编译成功,我仍然使用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)
推荐阅读
- macos - 文件中的shell脚本相对位置
- elasticsearch - 如何在 grok regex fluentd 中定义一个字段
- javascript - 过滤带有标题的列表并保留过滤项目的标题
- arrays - 如何在 Flutter 上显示 Widget 的数组元素
- embedded - 如何避免在 UART 通信期间损坏控制器
- install4j - 使用 Zulu 有哪些选择?
- ios - 如何从 URL 中获取查询参数?
- python - 在 PyQt5 中获取 QTabWidget 的背景颜色
- logstash - 时间过滤器字段名称:Kibana 中的 @timestamp
- cefsharp - Cefsharp 强制打开证书选择窗口