我似乎无法让CMake不断地找到我的原生质包。我想将protobuf源代码包括在内,并将其构建为我项目的一部分。我正在使用原产3.15.8和protobuf c 1.3.3 (用作控制示例)。
这是示例的目录设置:
- CMakeLists.txt
- deps/
- CMakeLists.txt
- protobuf/ # The protobuf 3.15.8 repository
- protobuf-c/ # The protobuf-c 1.3.3 repository
- target/
- CMakeLists.txt
根CMakeLists.txt
cmake_minimum_required(VERSION 3.15)
project(PROTOBUF_IMPORT_FAIL)
add_subdirectory(deps)
add_subdirectory(target)
deps/CMakeLists.txt
add_subdirectory(protobuf/cmake)
set(Protobuf_LIBRARIES "${CMAKE_CURRENT_BINARY_DIR}/protobuf/cmake/lib")
set(Protobuf_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/protobuf/src")
set(Protobuf_PROTOC_LIBRARY "${CMAKE_CURRENT_BINARY_DIR}/protobuf/cmake/libprotoc.a")
add_subdirectory(protobuf-c/build-cmake)
target/CMakeLists.txt
set(Protobuf_LIBRARIES "${CMAKE_CURRENT_BINARY_DIR}/../deps/protobuf/cmake/lib")
set(Protobuf_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}../deps/protobuf/src")
message("This is the problem!")
FIND_PACKAGE(Protobuf REQUIRED)
一旦一切就绪,我就可以尝试运行cmake
mkdir build
cd build
cmake ..
不幸的是,这最终给了我以下错误:
CMake Error at /usr/local/Cellar/cmake/3.23.0/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find Protobuf (missing: Protobuf_INCLUDE_DIR)
Call Stack (most recent call first):
/usr/local/Cellar/cmake/3.23.0/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
/usr/local/Cellar/cmake/3.23.0/share/cmake/Modules/FindProtobuf.cmake:650 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
target/CMakeLists.txt:7 (FIND_PACKAGE)
如果有帮助的话,下面是一些环境信息:
$ uname -a
Darwin coop-mac 21.4.0 Darwin Kernel Version 21.4.0: Fri Mar 18 00:45:05 PDT 2022; root:xnu-8020.101.4~15/RELEASE_X86_64 x86_64
$ cmake --version
cmake version 3.23.0
protobuf-c
也是套餐,但它实际上是成功的。为什么从目标中寻找它却找不到它,我如何修复它?
发布于 2022-05-12 14:26:10
find_package
用于查找已安装的库。安装的库通常是由cmake附带的脚本(所谓的find-模块)找到的,或者是因为库提供了配置脚本(比如profobuf config.cmake或profobuf- script ts.cmake)。后者是在库构建和安装之后生成的。这可能是第二个配置步骤成功的原因。
您不希望链接到已安装的库,而是自己构建库。所以,您所需要做的就是使用add_subdirectory
添加子文件夹(不要添加cmake子文件夹,它根据protobuf是不推荐的)。之后,您可以使用target_link_libraries
将protobuf链接到您的目标,而无需使用find_package
。
https://stackoverflow.com/questions/72218667
复制