最初,我在VCS中有一份protobuf副本,对此我完全不同意。我想将protobuf用作项目的外部依赖项。
该库仅需要libprotobuf.cmake
和libprotobuf-lite.cmake
。这些文件可以这样包含在自定义CMakeLists.txt
中:
cmake_minimum_required(VERSION 2.8.12)
project(protobuf C CXX)
# set protobuf_source_dir
# set protobuf_SHARED_OR_STATIC to "SHARED" or "STATIC"
include_directories(${protobuf_source_dir}/src)
include(${protobuf_source_dir}/cmake/libprotobuf-lite.cmake)
include(${protobuf_source_dir}/cmake/libprotobuf.cmake)
我听说过CMake的ExternalProject
,但CMake抱怨说在该项目中找不到任何CMakeLists.txt
。
答案 0 :(得分:2)
CMake的ExternalProject假定根目录中存在CMakeLists.txt
。但是,版本为3.4的protobuf有一些示例,并且在文件夹CMakeLists.txt
中有一个cmake
。
不修改外部库的用法示例:
set(PROTOBUF_TAR_GZ https://github.com/google/protobuf/archive/v3.4.0.tar.gz)
ExternalProject_Add(
protobuf-external
PREFIX protobuf
URL ${PROTOBUF_TAR_GZ}
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/protobuf
CMAKE_CACHE_ARGS
"-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}"
"-Dprotobuf_BUILD_TESTS:BOOL=OFF"
"-Dprotobuf_BUILD_EXAMPLES:BOOL=OFF"
"-Dprotobuf_WITH_ZLIB:BOOL=OFF"
"-DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER}"
# other project specific parameters
SOURCE_SUBDIR cmake
BUILD_ALWAYS 1
STEP_TARGETS build
INSTALL_COMMAND ""
)
EXternalProject_Get_Property(protobuf-external source_dir)
include_directories(${source_dir}/src)
link_directories(${CMAKE_CURRENT_BINARY_DIR}/protobuf)
重要的部分是将SOURCE_SUBDIR
设置为文件夹cmake
。
无论如何,我做出了以下假设(反映在CMAKE_CACHE_ARGS
中),但是它们可以更改,目前仅作为示例配置: