我有点绝望:对于我的学习,我需要与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 CMake
或
CMake找不到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)
有谁知道出了什么问题?
亲切的问候,朱利安
当一个库使用 CMake 定义构建并经历为自己构建安装包的麻烦时,将会有一个XXXConfig.cmake.
如果库无法将其目标导出到 CMake,CMake 会尝试通过提供FindXXX.cmake尝试定位此类库的脚本来弥补这一差距。
在文档中,FindXXX.cmake(模块模式)首先尝试,只有当失败时才尝试使用XXXConfig.cmake(配置模式)。但这对我来说似乎真的很倒退。
问题是,例如,我从源代码构建了 CURL,而 ConfigXXX 生成的目标名称与 FindXXX 不同,因此,在尝试使用它时,它失败了,因为 FindXXX 负责 find_package 请求并加载了与 FindXXX 不同的目标名称我所期待的。
我至少可以告诉 CMake 以相反的方式做事吗?首先是配置模式。
我知道我可以完全禁用模块模式,但我宁愿将其作为后备选项。
我不知道该搜索什么.如果这很简单,请原谅.但是,让我概述一下这个场景,看看那里有什么答案.
假设我有一个库,它定义了这样的结构:
struct Example {
int a;
#if B_ENABLED
int b;
#endif
};
Run Code Online (Sandbox Code Playgroud)
此标头作为整个库安装的一部分安装.我的问题是,如果我的库定义了B_ENABLED,它将包含一个包含这两个变量的结构. 但是,如果我的应用程序也没有定义它.然后它会将标题解释为定义只有一个成员的结构.
处理这个问题的最佳方法是生成某种"选项"标题,其中包括库构建中指定的所有#defines吗?
我的库使用CMAKE构建.因此,针对此的CMAKE解决方案是额外的信用 = D.
我的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是。
这是可能吗?
我制作并安装了 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) 我一直在尝试设置 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) 我正在尝试使用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下工作?
我正在尝试将 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)