Makefile для компоновки opencv.framework (я не использую cmake) - PullRequest
0 голосов
/ 07 июня 2018

Я использую opencv в своем проекте, и теперь я компилирую проект в статическую библиотеку, используя makefile, но всегда выводлю 'фатальную ошибку:' файл cv.h не найден '.Я искал этот сайт и в других местах, это не то, что мне нужно.Я знаю только немного синтаксиса makefile.Что мне делать?

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>

Каталог файлов

Использован make-файл

Новая ошибка

Я изменил 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 не может автоматически найти путь к подпапке?я делаю что-то не так?

Ответы [ 2 ]

0 голосов
/ 14 июня 2018

Наконец, я решил эту ошибку и успешно скомпилировал, я все еще использую 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)

Новый Makefile после ответа @ zomeck

# 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)
0 голосов
/ 07 июня 2018

Ваши пути к заголовкам: HEADER_PATH = -I./include -I./implement -I.

Внутри папки include, отображаемой во вложении, у вас есть 2 подпапки opencv и opencv2.

При включении cv.h файл включен напрямую без подпапок.Чтобы компилятор мог найти файлы, вам нужно либо добавить подпапки в HEADER_PATH, например HEADER_PATH = -I./include/opencv -I./include/opencv2 -I./implement, либо в #include <opencv/cv.h>, если cv.h находится непосредственно внутри подпапки opencv.

Примечание: у вас есть опечатка в папке denpendent

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...