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 脚本中获取缓存变量列表