问题标签 [cmakelists-options]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
100 浏览

c - CMake for protobuff-c-rpc 项目 - 生成 c 和 python 文件

我正在使用Google protobuf-c-rpc编写概念验证项目。

我想使用 CMake 来构建项目。我正在使用 CMake 版本 3.19

这是我的目录结构:

我已经在本地构建并安装了 protobuf-c-rpc 及其依赖项

我想使用 CMake 构建如下:

  1. Glob 接口文件夹并编译所有*.proto文件
  2. 从 *.proto 文件生成 C 头文件和源文件,并将它们分别放在 ${PROJECT_SOURCE_DIR}/server/include 和 ${PROJECT_SOURCE_DIR}/server/ 中
  3. 从 *.proto 文件生成 python 代码并将它们放在 ${PROJECT_SOURCE_DIR}/client/core
  4. 编译生成的C文件(包括example-server.c)
  5. 将第 4 步中的目标文件与 protobuf-c 库链接(目前,我只设法为 protobuf-c* 构建静态库)

到目前为止,这是我的 CMakeLists.txt 文件:

如何修改上面的 CMakeLists.txt,以实现我上面描述的工作流程?

[[编辑]]

如果我还可以在 CMakeLists 选项中指定 C 可执行文件的调试和发布版本,那就太好了

0 投票
1 回答
174 浏览

c++ - Cmake:如何链接多个库?

我正在使用 CMake 来定义 C++ 可执行文件的编译。目标是使用 2 个第三方库,Open3D 和 OpenCV。我可以将两者之一包含在 中target_link_libraries,但同时包含这两个结果会导致找不到 OpenCV 函数。

这是我现在的CMakeLists.txt

有了这个CMakeList.txt,我可以成功使用 OpenCV 功能。通过使用注释掉的 Open3D target_link_libraries,我可以成功使用 Open3D。取消注释时,无论andtarget_link_libraries的顺序如何,都无法找到 OpenCV 功能。如果我将两者都包含在一个. CMake 3.16.3 和 3.21.3 也会出现同样的错误。find_packagetarget_link_librariestarget_link_libraries(ORB_SLAM ${OpenCV_LIBS} ${Open3D_LIBRARIES})

错误如下:

对于代码

似乎Open3D::Open3D优先于opencv_calib3d;opencv_core;.... 是什么原因造成的,我该如何解决?这可能是由于 Open3D 的“::”与 OpenCV 的小写符号的差异造成的吗?

编辑:如果有任何用途,这里是所有 CMake 变量的转储https://textuploader.com/t5dvl/raw

原谅我的经验不足。我已经通过 CMake 文档和 Stackoverflow 问题搜索了线索,但到目前为止我什么也没找到。

0 投票
0 回答
31 浏览

cmake - CMake 导出生成的源

我正在尝试在我的项目中使用自动生成的源,这样做非常简单。

这工作正常。可以按预期安装目标,我可以使用 find_package 找到我的库并链接到它。但是当生成的源中的 CapnProto 版本与安装的源不一致时,问题开始出现。在这种情况下,它们必须再次生成。我的想法是创建自定义目标来包装生成命令并将其导出,以便在导入时生成源。但我无法做到这一点。

有没有一种通用的方法可以做到这一点?我可以在依赖项目中重新编译这部分。

0 投票
0 回答
92 浏览

cmake - CMake 配置问题:使用 Intel OneAPI 编译器在 Windows 上启用 64 位 Fortran 编译时出现问题

我正在尝试在 MPI 设置中为示例 hello world 类型的 Fortran 测试代码启用 64 位整数大小。操作系统:Windows 10 使用的编译器:英特尔 OneAPI 2021.4.0 MPI:英特尔 MPI

我尝试测试两种情况,

  1. 使用单行命令直接编译可执行文件,mpiifort -o test.exe -i8 test.f90
  2. 使用 CmakeLists 文件使用必要的 Fortran 64 位“-i8”选项和 find_package(MPI) 编译测试。我确保选择了 MPI 库(impi.lib、libmpi_ilp64.lib)并且 MPI_Fortran_Compiler 指向 mpiifort

我使用 API MPI_Type_size( ) 来确定 MPI_INTEGER 的大小,以检查是否为 Fortran/MPI 设置启用了 64 位环境。

场景 1 打印正确大小的 8 字节(64 位) 场景 2 打印错误大小的 4 字节(32 位)

我确实在 Cmake 构建系统中使用“-i8”选项来启用 64 位环境。但 MPI 似乎仍然是 32 位的。

请帮忙。

0 投票
0 回答
162 浏览

boost - CMake 找不到 Boost 及其组件

再次..

第一的:

以下情况:

我想通过 Cmake find_package boost。因此,我下载了 boost zip,解压缩并设置了 BOOST_ROOT。这是我当前的 CMakeLists.txt:

这导致了这个 Outlog:

是的,我..

我现在在网上搜索了 3 天,并偶然发现了不同的方法来解决这个问题。

从构建库,到安装东西..做东西和其他东西..等等..我真的不知道我在那里做了什么,因为对于我作为爱好的我来说,手册和修复比逻辑更神秘程序员...

我将 FindBoost.cmake 更改为更新的,支持 Boost 1.77 .. 尝试设置 Hinbt 路径,如 BOOST_INCLUDEDIR 和 BOOST_LIBRARYDIR .. 没有任何改变..

我尝试了 Boost 版本:1.77.0、1.76.0、1.69.0(当前)

所以..我不知道我还能做些什么,才能将提升链接到我的项目......

我希望有人可以在这里帮助我..

编辑:Sry Guys..但是..我对这个东西真的很陌生...

我使用 gcc 作为参数引导 boost 并在 boost 目录中调用 b2 ..

现在我有一个 bin.v2 + 收到消息:

完成:

在 find_package 之前

还是得到

:(

0 投票
1 回答
84 浏览

c++ - 仅 Cmake 命令行参数 - 使用链接外部库

我是 Cmake 和学习的新手。我正在使用 Ubuntu 20

我不允许更改 CMakeLists.txt 文件。我正在尝试使用-DIMPORTED_LOCATION= /home/map/third_party 来链接存在于用户定义位置而不是默认位置的外部库(libdlt.so)。但是使用此命令,我收到以下错误

您能否帮助澄清为什么不选择此参数?如果此库(libdlt.so)位于默认位置(/etc/local/lib),则 CMake 工作正常。

谢谢 <

0 投票
1 回答
83 浏览

cmake - 使用 Cmake 链接库 - 不直接使用

我是 Cmake 的新手。我正在使用 Ubuntu 20。

我在本地(/home/map/third_party)构建并安装了 dlt-daemon-2.18.8 并构建了日志库。

以下是日志库 CMakeLists.txt 的内容

以下是 src 文件夹中 CMakeLists.txt 的一部分,它位于 Log 文件夹(主 CMAke 文件)中

以下是日志库 CMakeLists.txt 的输出,看起来没问题。

在此之后,我正在使用上述日志库构建 1 个应用程序和 2 个库,但无法链接到以下错误

如果我安装这两个组件(sudo apt-get install libdlt2 & sudo apt-get install libdlt-dev),那么 2 个库(libe2exf.so & libe2e.so)正在构建但应用程序(执行管理器)失败并出现以下错误 /usr /bin/ld: /home/map/third_party/lib/libara_log.a(log_stream.cpp.o): 在函数ara::log::LogStream::operator<<(ara::core::Span<ara::core::internal::Byte const, 18446744073709551615ul>)':log_stream.cpp:(.text+0xbaf): undefined reference to dlt_user_log_write_sized_utf8_string' /usr/bin/ld: /home/map/third_party/lib/libara_log.a(log_stream .cpp.o):在函数ara::log::LogStream::WithLocation(ara::core::internal::basic_string_view<char, std::char_traits<char> >, int)':log_stream.cpp:(.text+0xdc6): undefined reference to dlt_user_log_write_sized_utf8_string'

我不想安装 libdlt2 和 libdlt-dev,请告诉我如何将上面的 1 个应用程序和 2 个库链接到 /home/map/third_party/lib/libdlt.so;

提前谢谢你好,

我在本地(/home/map/third_party)构建并安装了 dlt-daemon-2.18.8 并构建了日志库。

以下是日志库 CMakeLists.txt 的内容

以下是日志库 CMakeLists.txt 的输出,看起来没问题。

在此之后,我正在使用上述日志库构建 1 个应用程序和 2 个库,但它无法链接并出现以下错误

如果我安装这两个组件(sudo apt-get install libdlt2 & sudo apt-get install libdlt-dev),那么 2 个库(libe2exf.so & libe2e.so)正在构建但应用程序(执行管理器)失败并出现以下错误

/usr/bin/ld: /home/map/third_party/lib/libara_log.a(log_stream.cpp.o): 在函数 ara::log::LogStream::operator<<(ara::core::Span<ara::core::internal::Byte const, 18446744073709551615ul>)':log_stream.cpp:(.text+0xbaf): undefined reference to dlt_user_log_write_sized_utf8_string'

/usr/bin/ld: /home/map/third_party/lib/libara_log.a(log_stream.cpp.o): 在函数 ara::log::LogStream::WithLocation(ara::core::internal::basic_string_view<char, std::char_traits<char> >, int)':log_stream.cpp:(.text+0xdc6): undefined reference to dlt_user_log_write_sized_utf8_string'

我不想安装 libdlt2 和 libdlt-dev,请告诉我如何将上面的 1 个应用程序和 2 个库链接到 /home/map/third_party/lib/libdlt.so;

我正在使用以下 cmake 命令进行构建。请让我知道是否有误。

提前致谢

0 投票
1 回答
138 浏览

cmake - 在 gcloud 上部署烧瓶应用程序时出现“找不到 CMAKE_CXX_COMPILER”错误

我有一个在谷歌云上部署的烧瓶应用程序。使用需要 Cmake 的库“face_recognition”的应用程序。我通过在 DockerFile 中运行命令来安装 CMake,但出现错误。我不知道这是什么意思。

这是我的 Dockerfile

这是错误

0 投票
1 回答
196 浏览

cmake - CMakeLists.txt 错误。- “add_subdirectory(source) - 给定的源“源”不是现有目录”。我是 CMake 的新手,为此苦苦挣扎

这是我的 CMakeLists.txt 文件

编辑:这是我正在使用的命令:

在此处输入图像描述

0 投票
1 回答
357 浏览

cmake - CMake 和 ESP-IDF:创建自定义组件

框架:

ESP-IDF v4.3.1 - Eclipse 插件

具有 1 个活动组件的项目(我的计划是添加 ble 扫描、mqtt 消息传递和 wifi 访问)

目标: 为 ESP-IDF 中的自定义组件添加 MQTT 功能

问题:

项目目录内容:

在此处输入图像描述

/components/mqtt/CMakeLists.txt的内容:

我按照此处 ESP-IDF 文档的指示将 mqtt 和 esp-tls 所需的组件添加到 CMakeLists.txt 文件中:https ://docs.espressif.com/projects/esp-idf/en/latest/esp32/api- guides/build-system.html#idf-component-commands

尝试修复 1 我第一次尝试修复此代码是更新 /components/mqtt/CMakeLists.txt 的内容以直接引用所需的包含文件:

这可以构建,但必须有更好的方法来构建 mqtt 组件。谁能帮我修改我的 CMakeLists.txt 文件以正确拉入 esp-idf mqtt 组件?