我有一个项目,我在其中编写了一个使用exiv2库的库。exiv2
本身需要zlib。如果我不zlib
作为外部项目导入,我会通过安装包zlib1g-dev
(在 Ubuntu 上)让它工作,因为那样find_package( ZLIB REQUIRED )
fromexiv2
会找到它。
由于交叉编译的原因,我不能使用来自zlib1g-dev
. 这就是为什么我想将zlib
源添加为外部项目和exiv2
(也是外部项目)的依赖项。这是我走了多远:
CMakeLists.txt
我的图书馆:
# Download and unpack zlib at configure time
configure_file(CMakeLists.in.zlib zlib-download/CMakeLists.txt)
execute_process(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/zlib-download"
)
execute_process(COMMAND "${CMAKE_COMMAND}" --build .
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/zlib-download"
)
# Add zlib to the build
add_subdirectory("${CMAKE_CURRENT_BINARY_DIR}/zlib-src"
"${CMAKE_CURRENT_BINARY_DIR}/zlib-build"
)
# Download and unpack exiv2 at configure time
configure_file(CMakeLists.in.exiv2 exiv2-download/CMakeLists.txt)
execute_process(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/exiv2-download"
)
execute_process(COMMAND "${CMAKE_COMMAND}" --build .
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/exiv2-download"
)
# Override options of exiv2
set(EXIV2_BUILD_SAMPLES OFF CACHE BOOL "" FORCE)
set(EXIV2_BUILD_EXIV2_COMMAND OFF CACHE BOOL "" FORCE)
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
set(EXIV2_ENABLE_DYNAMIC_RUNTIME OFF CACHE BOOL "" FORCE)
# Add exiv2 to the build
add_subdirectory("${CMAKE_CURRENT_BINARY_DIR}/exiv2-src"
"${CMAKE_CURRENT_BINARY_DIR}/exiv2-build"
)
add_library(mylibrary mylibrary.cpp)
target_link_libraries(mylibrary exiv2lib)
在哪里CMakeLists.in.zlib
:
cmake_minimum_required(VERSION 2.8.2)
project(zlib-download NONE)
include(ExternalProject)
ExternalProject_Add(zlib
GIT_REPOSITORY https://github.com/madler/zlib.git
GIT_TAG master
SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/zlib-src"
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/zlib-build"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
)
并且CMakeLists.in.exiv2
:
cmake_minimum_required(VERSION 2.8.2)
project(exiv2-download NONE)
include(ExternalProject)
ExternalProject_Add(exiv2
GIT_REPOSITORY https://github.com/Exiv2/exiv2.git
GIT_TAG master
SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/exiv2-src"
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/exiv2-build"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
)
但是使用这些 CMake 文件会返回错误:
CMake Error at /usr/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find ZLIB (missing: ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
Call Stack (most recent call first):
/usr/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
/usr/share/cmake-3.10/Modules/FindZLIB.cmake:112 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
/tmp/QtCreator-wQKSzo/qtc-cmake-XXbL8ZLF/mylibrary/exiv2-src/cmake/findDependencies.cmake:24 (find_package)
/tmp/QtCreator-wQKSzo/qtc-cmake-XXbL8ZLF/mylibrary/exiv2-src/CMakeLists.txt:62 (include)
那么,我怎样才能zlib
提供给exiv2
?