问题标签 [cmake-modules]

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 回答
44 浏览

cmake - 使用 `find_package()` 排除 cmake 自己的分发模块

Cmake 包括各种分发模块(即,填充在Modules/cmake 安装目录中;例如,/usr/share/cmake-3.5/Modules/FindBoost.cmake)。

在开发包含名称与这些分发模块冲突的内部库的代码时,这会带来挑战,因为会find_package(Xyz)找到分发模块 ( /usr/share/cmake-3.5/Modules/FindXyz.cmake) 而不是用户模块 ( /home/user/opt/lib/cmake/Xyz-config.cmake)。我尝试设置CMAKE_FIND_ROOT_PATHand CMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY,但无济于事。

如何在评估时强制 cmake 排除其自己的分发模块find_package()

0 投票
0 回答
57 浏览

cmake - 如何定义目标以包含存储在单个目录中的多个库

我想创建一个允许目标包含存储在同一目录中的多个静态库的模块。

最终目标是允许-L<library dir> -l<staticlib-1> -l<staticlib-2> ... -l<staticlib-n>在链接时包含目标。

我尝试过使用target_link_libraries以下方法,但没有成功:

上面的代码片段会导致以下错误消息:

INTERFACE_LIBRARY 目标可能只有列入白名单的属性。不允许使用“LINK_DIRECTORIES”属性。

cmake 是否支持这种用例?如果是这样,它是如何完成的?

0 投票
1 回答
545 浏览

c++ - 如何在cmake中的项目之间添加_dependencies

我有一个如上所述的 CMakeLists.txt。正在尝试构建项目 abc。但要构建它,我还需要“a_certain_source_file.cpp”,它是来自另一个名为 xyz 的项目的自动生成的源文件。如果 xyz 是从同一个 CMakeLists.txt 构建的,那么 add_dependencies 工作不会有问题。我无法通过我现在拥有 CMakeLists.txt 的方式解决对“a_certain_source_file.cpp”的依赖。任何可以提供帮助的 CMake 爱好者或专家?

我在这里也看到了一个密切的匹配 - cmake: add_dependencies 不适用于外部项目,但我不需要下载任何东西。所以不确定这是否是我需要的。

0 投票
2 回答
1195 浏览

c++ - 如何使用 CMake 在 macOS 上使用和链接 boost?

感谢所有帮助过的人!最终起作用的是改变:

至:

尝试将 boost 链接到我的程序时出现以下错误:

但是,当运行 cmake 命令时,cmake 会通知我它已找到 boost 和所需的组件:

-- Found Boost: /usr/local/lib/cmake/Boost-1.74.0/BoostConfig.cmake (found suitable version "1.74.0", minimum required is "1.40") found components: program_options

我正在使用gccg++版本10.2.0。我使用cmake -DCMAKE_CXX_COMPILER=g++-10 -DCMAKE_C_COMPILER=gcc-10.

我已经尝试了以下 2 个链接选项,但是,它们都导致相同的错误:

target_link_libraries(cartogram CGAL::CGAL Boost::program_options ${FFTW_LIBRARIES})target_link_libraries(cartogram CGAL::CGAL ${Boost_LIBRARIES} ${FFTW_LIBRARIES})

在我调用查找 boost(使用:)之前,我也尝试过包括add_compile_definitions(_GLIBCXX_USE_CXX11_ABI=0)(编辑:来自Boost Linking questionsfind_package(Boost 1.40 COMPONENTS program_options REQUIRED))。

附带说明一下,完全相同的 cmake 文件可以在 Ubuntu、Linux 上完美找到!

我该如何解决这个错误?

编辑:我什至不完全确定这是否是链接错误,因为当我根本不包含要链接的 boost 库时(因为我相信程序选项可以用作仅标头库),我仍然得到同样的错误!

编辑 2:这是我的全部 CMake 代码:

编辑3:这是我跑步时得到的cmake -DCMAKE_CXX_COMPILER=g++-10 -DCMAKE_C_COMPILER=gcc-10

0 投票
0 回答
61 浏览

c++ - 使用 CMake 在 C++ 中创建和链接共享库 .so

我创建了一个 C++ 类,在其中使用getrusage getrusage(RUSAGE_SELF, &usage)计算 CPU 使用率。

我可以成功创建并链接shared library .so我创建的一个,但是,我想 shared.so在其他一些外部项目中使用同一个库。例如,如果我想将此链接.so到在不同项目中生成的二进制文件。

这是我从源文件CMakeLists.txt创建共享库的方法。libcpp_cpu_usage_library.so${PROJECT_SOURCE_DIR}/src/cpu_usage.cpp

CMakeLists.txt 生成共享库

问题

它与cpp_cpu_usage_binary生成到同一个 CMake 项目的二进制文件一起使用,但是,现在我想使用它libcpp_cpu_usage_library.so是一些外部 CMake 项目。

例如,我想在外部 C++ 和 CMake 项目中使用该共享库。

我知道我必须将上面的二进制文件链接到,libcpp_cpu_usage_library.so但是如何安装libcpp_cpu_usage_library.sousr/local/libroot然后包含并链接到我的外部 CMake 项目中。

感谢并期待。

阿尔斯兰

0 投票
0 回答
16 浏览

cmake - 如何从 cmake 调用 ExternalProject 输出二进制文件?

我正在尝试使用以下方法将平面缓冲区嵌入到我的项目中:

flatbuf 是按预期构建的,所以这里没有问题。接下来我尝试将它用于实际的代码生成,如下所示:

我敢肯定,即使它有效,这也不是获得 flatc 路径的最佳FLATC方法。"${CMAKE_BINARY_DIR}/bin/flatc"实际上我得到FLATC == ../bin/flatc.

因此我有两个问题:

  1. 我如何获得的绝对路径CMAKE_BINARY_DIR
  2. 调用 ExternalProject 构建的可执行文件的正确方法是什么?
0 投票
0 回答
124 浏览

cmake - 大家好,我发布了我在 ubuntu 16.04 lts 中遇到的错误。编译时

给出命令 cmake .. 后出现此错误

地理库已经安装 1.45-2 cmake 版本 - 3.5 boost 版本 - 1.75


发现提升 1.75。

找到 Boost 组件:

约会时间

发现提升 1.75。

找到 Boost 组件:

系统;program_options

-- 地理库:

/usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:148 处的 CMake 错误(消息):

找不到 GeographicLib(缺少:GeographicLib_INCLUDE_DIR GeographicLib_LIBRARY)(至少需要版本“1.45”)

调用堆栈(最近的调用优先):

/usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)

cmake/FindGeographicLib.cmake:27 (find_package_handle_standard_args) CMakeLists.txt:63 (find_package)


这个错误应该怎么办..?

0 投票
1 回答
26 浏览

c - 如何在 cmake 中包含 .spt 文件

我正在使用 windriver compile rhow 开发一个嵌入式项目,以包含(range.spt)程序集文件以将其编译到 range.o。我尝试了以下步骤

0 投票
2 回答
121 浏览

c++ - CMake BUILD 未定义参考(findpng)

我对 CMake 还是很陌生,所以绝对欢迎提供反馈。所以,我正在尝试构建一个简单的应用程序,最终应该使用 library 创建一个 pdf libharu

我想我想出了如何链接图书馆。但我仍然收到 findpng 模块的构建错误(我想libharu取决于它)

建造

CMakeLists.txt:

0 投票
1 回答
108 浏览

cmd - '。' 不被识别为内部或外部命令、可运行程序或批处理文件。CMake 错误

我一直在尝试使用 CMake从 Github 存储库https://github.com/dllu/puppup运行此代码。成功构建文件后,命令

导致以下错误

以下是对应的 CMakeList.txt 文件的代码

提前致谢!