尝试构建 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 的步骤
- git 克隆 https://github.com/awslabs/aws-lambda-cpp.git
- cd aws-lambda-cpp
- mkdir 构建
- 光盘构建
- cmake .. -DCMAKE_BUILD_TYPE=发布 -DBUILD_SHARED_LIBS=OFF\ -DCMAKE_INSTALL_PREFIX=${PWD}/安装
- 制作-j2
- 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:
想办法让它发挥作用
- 删除/home/yyyy/Qt/3rdLibs/aws-lambda-cpp/cmake/aws-lambda-runtime-config.cmake 的内容
- 设置路径为 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/