gpt4 book ai didi

c++ - CMake 和外部依赖

转载 作者:行者123 更新时间:2023-11-28 01:47:53 24 4
gpt4 key购买 nike

我想为我的项目添加一个外部依赖。我要添加的是 Leptonica库作为子模块。

我的项目有以下目录结构:

|根
CMakeLists.txt
|-bin
|- build
|-构建系统
|-可执行
|-轻音
|--CMakeLists.txt
|--cmake
|---配置.cmake
|-制作

在我的根 CMakeLists.txt 文件中,我添加了
ADD_SUBDIRECTORY(${ROOT_DIR}/leptonica)

不幸的是,CMake 没有在正确的目录中搜索 Configure.cmake:

CMake Error at leptonica/CMakeLists.txt:107 (include):

include could not find load file:

Configure

CMake Error: File

<root>/cmake/templates/LeptonicaConfig-version.cmake.in does not exist.

CMake Error at leptonica/CMakeLists.txt:113 (configure_file):

configure_file Problem configuring file

当我自己构建项目时,一切正常。在我看来,问题出在 CMAKE_SOURCE_DIR 上。使用 add_subdirectory 时,它的值是 ROOT CMake 而不是 ROOT/leptonica,因此它搜索了错误的路径 - 正如您在 Leptonica CMake 中看到的, 它用于确定其文件的路径。

解决此问题的正确方法是什么 - 我是否应该在调用 add_subdirectory 之前将 CMAKE_SOURCE_DIR 设置为 ROOT/leptonica 并将其重新设置什么时候完成,或者是否存在其他更优雅的解决方案?

最佳答案

并非每个 CMake 项目都适合通过 add_subdirectory 包含。

其中有使用 CMAKE_SOURCE_DIRCMAKE_BINARY_DIR 变量的项目。

但是,通过 ExternalProject_Add(可选地用 execute_process 包装)包含始终有效。


修改变量 CMAKE_SOURCE_DIR(和 CMAKE_BINARY_DIR 也是)是一个坏主意:这个变量只能由 CMake 本身更改。否则你可能会得到奇怪的错误。

相反,您可以用另一个变量替换(自动,使用一些脚本)对变量的所有引用,该变量未在项目中使用。您可以在进入子项目之前安全地设置这个新变量。

关于c++ - CMake 和外部依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44139362/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com