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

时间:2014-01-28 15:34:49

标签: c++ cmake libpng

我正在尝试编译一个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 < / em> - &gt;导致错误:源“/libpng-1.2.37-src/CMakeLists.txt”与用于生成缓存的源“/libpng-1.2.37-src/scripts/CMakeLists.txt”不匹配。
  4. 我该怎么做才能让它发挥作用?我不知道为什么如果CMakeLists.txt文件无法使用,它将被包括在内。

2 个答案:

答案 0 :(得分:5)

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),但是你再次尝试之前忘了清理构建目录。

答案 1 :(得分:0)

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

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