c++ - 在 ubuntu 18.04 上找不到 "Findaws-lambda-runtime.cmake"

标签 c++ amazon-web-services cmake aws-lambda

尝试构建 hello world 示例,但 cmake 总是报错

通过不在 CMAKE_MODULE_PATH 中提供“Findaws-lambda-runtime.cmake” 项目已要求 CMake 查找由提供的包配置文件 “aws-lambda-runtime”,但 CMake 没有找到。

环境

  • 操作系统:ubuntu18.04.3 LTS,64位
  • 通过以下方式安装 curl:sudo apt-get install libcurl4-openssl-dev
  • 通过ubuntu软件安装cmake(cmake版本3.16.1)

构建和安装 aws lambda cpp 的步骤

  1. git 克隆 https://github.com/awslabs/aws-lambda-cpp.git
  2. cd aws-lambda-cpp
  3. mkdir 构建
  4. 光盘构建
  5. cmake .. -DCMAKE_BUILD_TYPE=发布 -DBUILD_SHARED_LIBS=OFF\ -DCMAKE_INSTALL_PREFIX=${PWD}/安装
  6. 制作-j2
  7. sudo 进行安装

CmakeLists.txt(省略另一部分,要确保find_package先工作)

cmake_minimum_required(VERSION 3.5)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

project(aws_cpp_test LANGUAGES CXX)

list(APPEND CMAKE_MODULE_PATH "/home/yyyy/Qt/3rdLibs/aws-lambda-cpp/build/")
list(APPEND CMAKE_MODULE_PATH "/home/yyyy/Qt/3rdLibs/aws-lambda-cpp/cmake/")

find_package(aws-lambda-runtime REQUIRED)

add_executable(${PROJECT_NAME} "main.cpp")

我不使用 ec2 来构建项目,我如何告诉 cmake 它应该在哪里找到 aws-lambda-runtime?

编辑:

根据 Yevhenii Mamontov 的建议,我将 CMakeLists.txt 更改为

cmake_minimum_required(VERSION 3.5)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

project(aws_cpp_test LANGUAGES CXX)

set(AWS_LAMBDA_CMAKE "/home/yyyy/Qt/3rdLibs/aws-lambda-cpp/cmake/")
set(CMAKE_PREFIX_PATH "${AWS_LAMBDA_CMAKE};${CMAKE_PREFIX_PATH}")
#check the prefix paths are correct or wrong
foreach(path ${CMAKE_PREFIX_PATH})
  message("Path: " ${path})
endforeach(path)

find_package(aws-lambda-runtime REQUIRED)

但它有不同的错误信息

CMake Error at /home/yyyy/Qt/3rdLibs/aws-lambda-cpp/cmake/aws-lambda-runtime-config.cmake:6 (include): include could not find load file:

/home/yyyy/Qt/3rdLibs/aws-lambda-cpp/cmake/@CMAKE_PROJECT_NAME@-targets.cmake

我尝试了不同的路径

set(AWS_LAMBDA_CMAKE "/home/yyyy/Qt/3rdLibs/aws-lambda-cpp/build/install")
set(AWS_LAMBDA_CMAKE "/home/yyyy/Qt/3rdLibs/aws-lambda-cpp/build/install/lib/aws-lambda-runtime/cmake")

并尝试不添加任何新路径,但它们都给出相同的错误消息

编辑 2:

想办法让它发挥作用

  1. 删除/home/yyyy/Qt/3rdLibs/aws-lambda-cpp/cmake/aws-lambda-runtime-config.cmake 的内容
  2. 设置路径为 set(AWS_LAMBDA_CMAKE "/home/yyyy/Qt/3rdLibs/aws-lambda-cpp/build/install/lib/aws-lambda-runtime/cmake")

但是,这个解决方案很尴尬,应该要求cmake不要先从路径“/home/yyyy/Qt/3rdLibs/aws-lambda-cpp/cmake”搜索

编辑 3:

我在 Edit 2 中编写的解决方案不起作用。添加时失败

add_executable(${PROJECT_NAME} "main.cpp")
target_link_libraries(${PROJECT_NAME} PUBLIC AWS::aws-lambda-runtime)

错误信息是

目标“aws_cpp_test”链接到目标“AWS::aws-lambda-runtime”,但 找不到目标。也许缺少 find_package() 调用 IMPORTED 目标,或缺少 ALIAS 目标?

最佳答案

您可以尝试在 find_package 之前设置 CMAKE_PREFIX_PATH 吗? 像这样:

set(AWS_LAMBDA_CMAKE "/home/yyyy/Qt/3rdLibs/aws-lambda-cpp/cmake/")
set(CMAKE_PREFIX_PATH "${AWS_LAMBDA_CMAKE};${CMAKE_PREFIX_PATH}")

第一个 set() 创建一个变量,其中包含您的 lib cmake 文件夹的路径。 第二个 set() 附加到 CMAKE_PREFIX_PATH 的另一个路径,用于搜索您在 find_package() 中指示的任何包。

关于c++ - 在 ubuntu 18.04 上找不到 "Findaws-lambda-runtime.cmake",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59372511/

相关文章:

c++ - pthreads mutex 的段错误

ruby-on-rails - 在 Heroku 日志中找不到错误

amazon-web-services - AWS ALB 与 GRPC

c++ - qmake 相当于 cmake execute_process()

c++ - 如果在纯 c++ 中是静态的?

c++ - 使用 get 函数访问存储在节点中的数据

c++ - 为什么 sizeof(argv)/sizeof(argv[0]) 给我 C++ 中数组的大小?

amazon-web-services - 使用 golang 从 DynamoDB 获取记录时出现紧急运行时错误

c++ - CMake:CMAKE_REQUIRED_LIBRARIES 中的库顺序,用于在配置时测试最小程序

c++11 std::unique_ptr 错误 cmake 3.11.3 bootstrap