cmake - CMakeLists.txt 不在根文件夹中(但包含在源代码中)

Posted

技术标签:

【中文标题】cmake - CMakeLists.txt 不在根文件夹中(但包含在源代码中)【英文标题】:cmake - CMakeLists.txt is not in root folder (but is included in source) 【发布时间】:2014-02-20 00:11:16 【问题描述】:

我正在尝试编译一个 libpng 库。问题是我需要这个库的特定版本 - 1.2.37 - 因为我正在使用它的项目是用这个版本编写的。 我找到了这个版本的源代码here(GnuWin32项目)。

但是文件夹结构看起来像这样:

libpng-1.2.37-src/
   contrib/
   projects/
   scripts/
      CMakeLists.txt
   png.h
   pngread.c
   pngwrite.c
   ...

看,CMakeLists.txt 比源文件深一层。

我试过了:

    源目录 libpng-1.2.37-src/ -> 导致错误:源目录似乎不包含 CMakeLists.txt 源目录libpng-1.2.37-src/scripts -> 导致多个错误:文件libpng-1.2.37-src/scripts/scripts/libpng.pc.in 不存在。 将 CMakeLists.txt 从 /scripts 复制到 /libpng-1.2.37-src 并将源目录设置为 /libpng-1.2.37-src -> 导致错误:源“/libpng-1.2.37-src/CMakeLists.txt”与用于生成缓存的源“/libpng-1.2.37-src/scripts/CMakeLists.txt”不匹配.

我应该怎么做才能让它工作?不知道为什么不能使用CMakeLists.txt文件会被包含进来。

【问题讨论】:

我相信你应该再次尝试3.,但在此之前擦除二进制目录。该错误来自更改源目录,同时保持缓存不变 - 如果您从新的二进制目录开始,它应该可以工作。 【参考方案1】:

INSTALL 文件明确表示:

If you want to use "cmake" (see www.cmake.org), copy CMakeLists.txt
from the "scripts" directory to this directory and type

   cmake . [-DPNG_MMX=YES] -DCMAKE_INSTALL_PREFIX=/path
   make
   make install

作为旁注,在此之前它说安装它的经典方法是:

On Unix/Linux and similar systems, you can simply type

    ./configure [--prefix=/path]
    make check
    make install

听起来您在 3) 上做得对,但是您在重试之前忘记清理构建目录。

【讨论】:

为什么我觉得这个答案告诉我在其他地方有解决方案【参考方案2】:

如果它是您在项目中使用的库,您可以通过称为“superbuild”的技术自动构建它(使用 ExternalProject_Add)。 通过将 SOURCE_SUBDIR 指定为 here 描述的 CMakeLists.txt 子目录,您可以执行类似的操作

  ExternalProject_Add(libpng
  GIT_REPOSITORY    url-to-your-repository.git
  GIT_TAG           v1.2.37
  SOURCE_SUBDIR     "scripts"

【讨论】:

以上是关于cmake - CMakeLists.txt 不在根文件夹中(但包含在源代码中)的主要内容,如果未能解决你的问题,请参考以下文章

CMake 从 CMakeLists.txt 脚本中获取缓存变量列表

CMake 配置 CMakeLists.txt

将 CMake 选项从命令行移动到*** CMakeLists.txt

Cmake CMakeLists.txt配置文件通用模板

Cmake CMakeLists.txt配置文件通用模板

从父 CMakeLists.txt 覆盖 CMake 中的默认选项(...)值