【问题标题】:cmake - CMakeLists.txt is not in root folder (but is included in source)cmake - CMakeLists.txt 不在根文件夹中(但包含在源代码中)
【发布时间】: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 比源文件深一层。

我试过了:

  1. 源目录 libpng-1.2.37-src/ -> 导致错误:源目录似乎不包含 CMakeLists.txt
  2. 源目录libpng-1.2.37-src/scripts -> 导致多个错误:文件libpng-1.2.37-src/scripts/scripts/libpng.pc.in 不存在。
  3. 将 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.,但在此之前擦除二进制目录。该错误来自更改源目录,同时保持缓存不变 - 如果您从新的二进制目录开始,它应该可以工作。

标签: c++ cmake libpng


【解决方案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"

【讨论】:

    猜你喜欢
    • 2018-08-13
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 2018-02-06
    • 1970-01-01
    • 2021-06-09
    相关资源
    最近更新 更多