共享库Cmake的其他文件

时间:2020-06-15 16:41:27

标签: c++ c opencv cmake shared-libraries

我有一个由CMake制作的动态库,该库使用opencv,更具体地说是dnn模块。 这是我的CMakeLists.txt

cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
#################configure_file(facedetect.pc.in facedetect.pc @ONLY)
project(facedetect LANGUAGES C CXX VERSION 0.0.1)

set(CMAKE_VERBOSE_MAKEFILE FALSE)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

if (CMAKE_COMPILER_IS_GNUCXX)
 set(CMAKE_C_FLAGS_DEBUG "-g -ggdb -pg -fsanitize=undefined")
 set(CMAKE_C_FLAGS_RELEASE "-O2")
 set(CMAKE_CXX_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG})
 set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE})
endif ()

set(CMAKE_BUILD_TYPE RELEASE)


list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules/")

find_package(OpenCV REQUIRED PATHS "${CMAKE_CURRENT_SOURCE_DIR}/opencv/")
include_directories( ${OpenCV_INCLUDE_DIRS} )

add_library(facedetect SHARED "${CMAKE_CURRENT_SOURCE_DIR}/src/facedetect.cpp")
set_target_properties(facedetect PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/src/facedetect.h")
target_include_directories(facedetect PRIVATE include)
target_include_directories(facedetect PRIVATE src)

target_link_libraries( facedetect ${OpenCV_LIBS} )

install(TARGETS facedetect
    LIBRARY DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/lib/"
    PUBLIC_HEADER DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/include/")

install(TARGETS
        facedetect
    EXPORT facedetect.pc.in
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
export(TARGETS
        facedetect
    NAMESPACE facedetect::
    FILE "${CMAKE_CURRENT_BINARY_DIR}/facedetectConfig.cmake"
)
install(EXPORT
        facedetect.pc.in
    DESTINATION "${CMAKE_INSTALL_DATADIR}/facedetect/cmake"
    NAMESPACE facedetect::
)

./src/facedetect.cpp(用于构建库)使用两个文件:

const std::string caffeConfigFile = "./src/deploy.prototxt.txt";

const std::string caffeWeightFile = "./src/res10_300x300_ssd_iter_140000.caffemodel";

当我建立我的图书馆时,除了那两个文件之外,一切都很好: 我有一个使用我的库的项目,当我尝试启动main.cpp时,它向我显示了这一点:

OpenCV(4.4.0-pre) /home/remmidemmi/FaceDetectorTT/opencv/modules/dnn/src/caffe/caffe_io.cpp:1121: error: (-2:Unspecified error) FAILED: fs.is_open(). Can't open "./deploy.prototxt.txt" in function 'ReadProtoFromTextFile'

我的项目的cmakefile:

cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
project(app LANGUAGES C CXX VERSION 0.0.1)

set(CMAKE_VERBOSE_MAKEFILE FALSE)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

if (CMAKE_COMPILER_IS_GNUCXX)
 set(CMAKE_C_FLAGS_DEBUG "-g -ggdb -pg -fsanitize=undefined")
 set(CMAKE_C_FLAGS_RELEASE "-O2")
 set(CMAKE_CXX_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG})
 set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE})
endif ()

set(BOOST_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/boost_1_72_0/")
set(Boost_USE_STATIC_LIBS OFF) 
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF) 

find_package(facedetect REQUIRED PATHS "${CMAKE_CURRENT_SOURCE_DIR}/facedetect/"
             REQUIRED COMPONENTS facedetect)
find_package(Boost REQUIRED COMPONENTS filesystem)
include_directories( ${BOOST_INCLUDE_DIRS} )

add_executable(app main.cpp)
target_link_libraries(app facedetect::facedetect)
target_link_libraries( app Boost::filesystem )

install(TARGETS app DESTINATION bin)

所以我的问题是如何将这两个文件添加到.so所在的位置,或者我应该整体上怎么做,所以我一直陷在这个问题上,却找不到答案

0 个答案:

没有答案