相关疑难解决方法(0)

无法通过CMake找到Eigen3

我有点绝望:对于我的学习,我需要与Eigen和CMake合作.我能够使用Eigen,如果我将整个库复制到我的编译器默认查找的目录中,但是一旦我尝试通过它找到它
find_package(Eigen3 REQUIRED)
我得到以下错误:


CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
  Could NOT find Eigen3 (missing: EIGEN3_INCLUDE_DIR EIGEN3_VERSION_OK)
  (Required is at least version "2.91.0")
Call Stack (most recent call first):
  /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
  FindEigen3.cmake:76 (find_package_handle_standard_args)
  CMakeLists.txt:8 (find_package)

-- Configuring incomplete, errors occurred!

Run Code Online (Sandbox Code Playgroud)

现在我搜索了解决方案,但我尝试过的所有(也是stackoverflow上的那些:
查找包Eigen3 for CMakeCMake找不到Eigen3)都不起作用.我的Eigen版本(根据Macros Core/util/Macros.h)是3.2.5.我保留了Eigen目录/usr/local/include,我使用FindEigen3.cmake了Eigen库附带的内容,我的CMakeLists.txt外观如下:


cmake_minimum_required(VERSION 2.8)
project(Test)

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
find_package(Eigen3 REQUIRED)
include_directories(${EIGEN3_INCLUDE_DIR})
message("Found Eigen3 in: ${EIGEN3_INCLUDE_DIR}")

add_executable(main test.cpp)
Run Code Online (Sandbox Code Playgroud)

有谁知道出了什么问题?

亲切的问候,朱利安

c++ cmake eigen3

9
推荐指数
1
解决办法
1万
查看次数

如何使用配置模式进行 find_package 搜索并在模块模式下进行回退?

当一个库使用 CMake 定义构建并经历为自己构建安装包的麻烦时,将会有一个XXXConfig.cmake.

如果库无法将其目标导出到 CMake,CMake 会尝试通过提供FindXXX.cmake尝试定位此类库的脚本来弥补这一差距。

在文档中,FindXXX.cmake(模块模式)首先尝试,只有当失败时才尝试使用XXXConfig.cmake(配置模式)。但这对我来说似乎真的很倒退。

问题是,例如,我从源代码构建了 CURL,而 ConfigXXX 生成的目标名称与 FindXXX 不同,因此,在尝试使用它时,它失败了,因为 FindXXX 负责 find_package 请求并加载了与 FindXXX 不同的目标名称我所期待的。

我至少可以告诉 CMake 以相反的方式做事吗?首先是配置模式。

我知道我可以完全禁用模块模式,但我宁愿将其作为后备选项。

c++ cmake

7
推荐指数
2
解决办法
1096
查看次数

库头和#define

我不知道该搜索什么.如果这很简单,请原谅.但是,让我概述一下这个场景,看看那里有什么答案.

假设我有一个库,它定义了这样的结构:

struct Example {
    int a;
#if B_ENABLED
    int b;
#endif
};
Run Code Online (Sandbox Code Playgroud)

此标头作为整个库安装的一部分安装.我的问题是,如果我的库定义了B_ENABLED,它将包含一个包含这两个变量的结构. 但是,如果我的应用程序也没有定义它.然后它会将标题解释为定义只有一个成员的结构.

处理这个问题的最佳方法是生成某种"选项"标题,其中包括库构建中指定的所有#defines吗?

我的库使用CMAKE构建.因此,针对此的CMAKE解决方案是额外的信用 = D.

c++ cmake shared-libraries

6
推荐指数
1
解决办法
4404
查看次数

安装CMake库:是否还为依赖项提供了查找模块?

我的CMake库MyLibrary具有一个依赖关系OtherLibrary,我可以使用非标准 库导入该库FindOtherLibrary.cmake

我的图书馆OtherLibrary公开依靠:

target_link_libraries(MyLibrary PUBLIC OtherLibrary::OtherLibrary)
Run Code Online (Sandbox Code Playgroud)

当我安装MyLibrary(与一起MyLibraryConfig.cmake),并且用户想要链接到它时,因此他们需要import OtherLibrary

是否有关于如何分配一个很好的做法FindOtherLibrary.cmake一起MyLibrary


理想情况下,如果其中包含类似以下内容,则可以从安装的配置文件中自动MyLibrary导入,从而使用户更轻松OtherLibraryMyLibraryConfig.cmake

include(CMakeFindDependencyMacro)
find_dependency(OtherLibrary)
Run Code Online (Sandbox Code Playgroud)

并且知道在哪里FindOtherLibrary.cmake是。

这是可能吗?

cmake

6
推荐指数
1
解决办法
518
查看次数

CMake find_package 找不到 Find<package>.cmake

我制作并安装了 aruco 库,它将 Findaruco.cmake 文件放在 /usr/local/lib/cmake 目录中。在我的 CMakeLists.txt 文件中

...
find_package(aruco REQUIRED)
Run Code Online (Sandbox Code Playgroud)

它总是返回标准错误

By not providing "Findaruco.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "aruco", but
CMake did not find one.

Could not find a package configuration file provided by "aruco" with any of
the following names:

    arucoConfig.cmake
    aruco-config.cmake

Add the installation prefix of "aruco" to CMAKE_PREFIX_PATH or set
"aruco_DIR" to a directory containing one of the above files.  If "aruco"
provides …
Run Code Online (Sandbox Code Playgroud)

c++ cmake catkin

5
推荐指数
1
解决办法
4万
查看次数

CMake 的 GLFW 构建错误:“已考虑但未接受以下配置文件”

我一直在尝试设置 GLFW 来启动 OpenGL 项目,但是不断出现错误,无论我如何尝试都无法解决。错误消息的重要部分如下:

CMake Error at CMakeLists.txt:12 (find_package):
  Could not find a configuration file for package "glfw3" that is compatible
  with requested version "3.3.2".

The following configuration files were considered but not accepted:

    C:/Users/../GLFW/lib/cmake/glfw3/glfw3Config.cmake, version: 3.3.2 (32bit)
Run Code Online (Sandbox Code Playgroud)

我的 CMakeLists.txt 如下所示:

set(CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/Dependencies/GLFW/lib/cmake/glfw3")

add_executable(1_Intro main.cpp)

include_directories(Dependencies/GLFW/include/GLFW/)

find_package(glfw3 3.3.2 CONFIG REQUIRED)
target_link_libraries(1_Intro ${GLFW})
Run Code Online (Sandbox Code Playgroud)

所有必需的 GLFW 文件都可以在我的项目文件夹中找到,如下所示:

GLFW
|- include
|   |- GLFW
|       | - glfw3.h
|       | - glfw3native.h
|- lib
    |- cmake
        |- glfw3
            |- glfw3Config.cmake
            |- glfw3ConfigVersion.cmake …
Run Code Online (Sandbox Code Playgroud)

cmake glfw

2
推荐指数
1
解决办法
5054
查看次数

为什么CLion不将我的项目与OpenCV for Windows链接?

我正在尝试使用opencv.org提供的OpenCV for Windows,我正在使用JetBrains的CLion IDE构建一个项目.我已经安装了opencv库并配置了CLion()来引用它下面的构建目录,但是CMake发出了警告: set(OpenCV_DIR

Found OpenCV Windows Pack but it has no binaries compatible with your configuration.    
You should manually point CMake variable OpenCV_DIR to your build of OpenCV library.
Run Code Online (Sandbox Code Playgroud)

我尝试了一些来自opencv.org的旧版本,结果相同.看来CMake正在定位OpenCV库,但不想使用它们.为什么,以及如何让OpenCV库在CLion下工作?

opencv cmake clion

1
推荐指数
1
解决办法
2169
查看次数

使用预安装的软件包从源代码构建 grpc

我正在尝试将 gRPC 集成到现有项目中。它已经有包含安装的所有 gRPC 依赖项(ssl、c-ares、protobuf 和 zlib)的目录。我想在构建 gRPC 时使用它们,并将 gRPC 安装到同一目录中。我下载了 gRPC 存档(没有克隆位于 grpc/third_party/ 中的子模块),并尝试生成构建系统,用于构建 gRPC 并将其安装到我的目标文件夹中(使用 cmake)。

我使用了以下命令:

cmake -DCMAKE_INSTALL_PREFIX=$PREFIX -DgRPC_ZLIB_PROVIDER=package -DgRPC_PROTOBUF_PROVIDER=package -DgRPC_SSL_PROVIDER=package -DgRPC_CARES_PROVIDER=package
Run Code Online (Sandbox Code Playgroud)

并得到一个错误:

CMake Error at cmake/cares.cmake:34 (find_package):
Could not find a package configuration file provided by "c-ares" with any
of the following names:

c-aresConfig.cmake
c-ares-config.cmake
Add the installation prefix of "c-ares" to CMAKE_PREFIX_PATH or set
"c-ares_DIR" to a directory containing one of the above files.  If "c-ares"
provides a separate development package or SDK, be sure …
Run Code Online (Sandbox Code Playgroud)

cmake c-ares grpc

1
推荐指数
1
解决办法
4613
查看次数

标签 统计

cmake ×8

c++ ×4

c-ares ×1

catkin ×1

clion ×1

eigen3 ×1

glfw ×1

grpc ×1

opencv ×1

shared-libraries ×1