问题标签 [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.
c - CMake for protobuff-c-rpc 项目 - 生成 c 和 python 文件
我正在使用Google protobuf-c-rpc编写概念验证项目。
我想使用 CMake 来构建项目。我正在使用 CMake 版本 3.19
这是我的目录结构:
我已经在本地构建并安装了 protobuf-c-rpc 及其依赖项
我想使用 CMake 构建如下:
- Glob 接口文件夹并编译所有
*.proto
文件 - 从 *.proto 文件生成 C 头文件和源文件,并将它们分别放在 ${PROJECT_SOURCE_DIR}/server/include 和 ${PROJECT_SOURCE_DIR}/server/ 中
- 从 *.proto 文件生成 python 代码并将它们放在 ${PROJECT_SOURCE_DIR}/client/core
- 编译生成的C文件(包括example-server.c)
- 将第 4 步中的目标文件与 protobuf-c 库链接(目前,我只设法为 protobuf-c* 构建静态库)
到目前为止,这是我的 CMakeLists.txt 文件:
如何修改上面的 CMakeLists.txt,以实现我上面描述的工作流程?
[[编辑]]
如果我还可以在 CMakeLists 选项中指定 C 可执行文件的调试和发布版本,那就太好了
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_package
target_link_libraries
target_link_libraries(ORB_SLAM ${OpenCV_LIBS} ${Open3D_LIBRARIES})
错误如下:
对于代码
似乎Open3D::Open3D
优先于opencv_calib3d;opencv_core;...
. 是什么原因造成的,我该如何解决?这可能是由于 Open3D 的“::”与 OpenCV 的小写符号的差异造成的吗?
编辑:如果有任何用途,这里是所有 CMake 变量的转储https://textuploader.com/t5dvl/raw
原谅我的经验不足。我已经通过 CMake 文档和 Stackoverflow 问题搜索了线索,但到目前为止我什么也没找到。
cmake - CMake 导出生成的源
我正在尝试在我的项目中使用自动生成的源,这样做非常简单。
这工作正常。可以按预期安装目标,我可以使用 find_package 找到我的库并链接到它。但是当生成的源中的 CapnProto 版本与安装的源不一致时,问题开始出现。在这种情况下,它们必须再次生成。我的想法是创建自定义目标来包装生成命令并将其导出,以便在导入时生成源。但我无法做到这一点。
有没有一种通用的方法可以做到这一点?我可以在依赖项目中重新编译这部分。
cmake - CMake 配置问题:使用 Intel OneAPI 编译器在 Windows 上启用 64 位 Fortran 编译时出现问题
我正在尝试在 MPI 设置中为示例 hello world 类型的 Fortran 测试代码启用 64 位整数大小。操作系统:Windows 10 使用的编译器:英特尔 OneAPI 2021.4.0 MPI:英特尔 MPI
我尝试测试两种情况,
- 使用单行命令直接编译可执行文件,mpiifort -o test.exe -i8 test.f90
- 使用 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 位的。
请帮忙。
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 之前
还是得到
:(
c++ - 仅 Cmake 命令行参数 - 使用链接外部库
我是 Cmake 和学习的新手。我正在使用 Ubuntu 20
我不允许更改 CMakeLists.txt 文件。我正在尝试使用-DIMPORTED_LOCATION= /home/map/third_party 来链接存在于用户定义位置而不是默认位置的外部库(libdlt.so)。但是使用此命令,我收到以下错误
您能否帮助澄清为什么不选择此参数?如果此库(libdlt.so)位于默认位置(/etc/local/lib),则 CMake 工作正常。
谢谢 <
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 命令进行构建。请让我知道是否有误。
提前致谢
cmake - 在 gcloud 上部署烧瓶应用程序时出现“找不到 CMAKE_CXX_COMPILER”错误
我有一个在谷歌云上部署的烧瓶应用程序。使用需要 Cmake 的库“face_recognition”的应用程序。我通过在 DockerFile 中运行命令来安装 CMake,但出现错误。我不知道这是什么意思。
这是我的 Dockerfile
这是错误
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 组件?