相关疑难解决方法(0)

CMake:如果你需要指定CMAKE_MODULE_PATH,find_package()的用途是什么?

我正在尝试使用CMake实现跨平台构建系统.现在该软件有一些依赖性.我自己编译并将它们安装在我的系统上.

安装的一些示例文件:

-- Installing: /usr/local/share/SomeLib/SomeDir/somefile
-- Installing: /usr/local/share/SomeLib/SomeDir/someotherfile
-- Installing: /usr/local/lib/SomeLib/somesharedlibrary
-- Installing: /usr/local/lib/SomeLib/cmake/FindSomeLib.cmake
-- Installing: /usr/local/lib/SomeLib/cmake/HelperFile.cmake
Run Code Online (Sandbox Code Playgroud)

现在,CMake有一个find_package()打开Find*.cmake文件并在系统上的库之后搜索并定义一些变量等SomeLib_FOUND.

我的CMakeLists.txt包含这样的内容:

set(CMAKE_MODULE_PATH "/usr/local/lib/SomeLib/cmake/;${CMAKE_MODULE_PATH}")
find_package(SomeLib REQUIRED)
Run Code Online (Sandbox Code Playgroud)

第一个命令定义了CMake在搜索之后搜索的位置,Find*.cmake并且我添加SomeLibFindSomeLib.cmake可以找到的目录,因此find_package()按预期工作.

但这find_package()有点奇怪,因为存在的原因之一是远离非跨平台硬编码路径.

这通常是怎么做的?我应该将cmake/目录复制SomeLib到我的项目中并设置CMAKE_MODULE_PATH相对吗?

cmake

141
推荐指数
2
解决办法
13万
查看次数

Cmake找不到Boost

我正在尝试使用CMake配置项目,但即使它们位于指定的文件夹中,也无法找到Boost库.我已经指定了Boost_INCLUDE_DIR,Boost_LIBRARYDIR和BOOST_ROOT,但是我仍然收到错误,说CMake无法找到Boost.这种错误的原因是什么?

boost cmake

76
推荐指数
6
解决办法
14万
查看次数

CMake找不到Eigen3

我已将FindEigen3.cmake复制到我的源目录中.

然后我补充说:

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR})
Run Code Online (Sandbox Code Playgroud)

到我的CMakeLists.txt告诉CMake使用这个.cmake文件.

然后在我的CMakeLists.txt中我做:

FIND_PACKAGE(Eigen3)
Run Code Online (Sandbox Code Playgroud)

我将环境变量EIGEN3_INCLUDE_DIR设置为/ home/doriad/src/eigen

当我运行CMake时,我得到:

-- Could NOT find Eigen3 (missing: EIGEN3_INCLUDE_DIR EIGEN3_VERSION_OK) (Required is at least version "2.91.0")
Run Code Online (Sandbox Code Playgroud)

这是Mercurial的新克隆版,所以版本应该至少为3.

有什么建议?

如果我设置模块路径不正确,我会得到一些线索:

Adjust CMAKE_MODULE_PATH to find FindEigen3.cmake or set Eigen3_DIR to the
directory containing a CMake configuration file for Eigen3. The file will
have one of the following names:

Eigen3Config.cmake
eigen3-config.cmake
Run Code Online (Sandbox Code Playgroud)

但是,我没有在Eigen3的源目录或构建目录中找到这些文件.我试图设置Eigen3_DIR =/home/doriad/src/eigen,但这也不起作用.

思考?

谢谢,

大卫

cmake eigen

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

找到包装Eigen3 for CMake

CMake无法找到我的Eigen3包.我设置了一个名为的环境变量

EIGEN3_INCLUDE_DIR
Run Code Online (Sandbox Code Playgroud)

指向路径在哪里FindEigen3.cmake.

然后在CMakelists.txt我写道:

find_package( Eigen3 REQUIRED )
include_directories( EIGEN3_INCLUDE_DIR )
Run Code Online (Sandbox Code Playgroud)

我得到下一条错误消息:

CMake Error at C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:91 (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):
  C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:252 (_FPHSA_FAILURE_MESSAGE)
  C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindEigen3.cmake:76 (find_package_handle_standard_args)
  test/test_quaternion/CMakeLists.txt:25 (find_package)
Run Code Online (Sandbox Code Playgroud)

关于我遗失或做错的任何想法?

cmake eigen

21
推荐指数
3
解决办法
6万
查看次数

使CMake库可以自动访问其他CMake包

我有一个产生库的项目:

project (myCoolLibrary)
ADD_LIBRARY(my_cool_library SHARED ${mysources_SRC})
Run Code Online (Sandbox Code Playgroud)

另一个应该使用这个库的项目:

find_package (myCoolLibrary REQUIRED)
INCLUDE_DIRECTORIES("${myCoolLibrary_INCLUDE_DIRS}" )
add_executable(myCoolExe ${my_sources_SRC} )
TARGET_LINK_LIBRARIES(myCoolExe ${myCoolLibrary_LIBRARIES} )
Run Code Online (Sandbox Code Playgroud)

有没有办法可以更改第一个文件,以便第二个文件自动运行?通过在第一个文件上运行CMake然后在输出上运行make,然后在第二个文件上运行CMake,CMake能够找到包吗?

我只是将第一个项目的构建地址提供给第二个包的答案也是可以接受的.

cmake

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

标签 统计

cmake ×5

eigen ×2

boost ×1