Я получил основной проект, основанный на C, и мне нужно включить функцию CPP (использующую OpenCV). Я использовал файл Cmake для этого, но это не работает, когда я добавляю файл cpp.
Здесь мой Makefile
cmake_minimum_required (VERSION 2.8.9)
project(tictactoe)
### Requierements
find_package(OpenCV REQUIRED )
include_directories(../Sources)
include_directories(${OpenCV_INCLUDE_DIRS})
include(CheckIncludeFiles)
include(CheckIncludeFileCXX)
### Subdirectories where the sources are
FILE(GLOB MyCSources "../Sources/*.c")
ADD_LIBRARY(detect_tag ../Sources/detect_tag.cpp ../Sources/detect_tag.hpp)
ADD_EXECUTABLE(tictactoe ${MyCSources} ../Sources/detect_tag.cpp ../Sources/detect_tag.hpp)
TARGET_LINK_LIBRARIES(tictactoe rt ${CMAKE_THREAD_LIBS_INIT} ${OpenCV_LIBS})
Хорошо, я решил свою проблему с помощью обертки: я создал заголовочный файл, такой как wrapper.h и wrapper.cpp.
в wrapper.hi получил:
extern "C" my_function_through_wrapper();
в wrapper.ci получил:
#include file_where_my_function_if.h
extern "c" {
my_function_through_wrapper(){
my_function();
}
}
И это! Действительно, я создал интерфейс между реальным CPP и C-кодом. С extern C мой компилятор знает, как легко скомпилировать файл-обертку, чтобы мой код C мог ссылаться на него. Затем через обертку CPP можно связать с другим кодом CPP, используя все включенные librairies в CPP. Решено!
*.hpp
не нужно указывать в источниках: они не скомпилированы, а если они не включены, то они не используются ... так что cmake не не нужно знать о них.