CMAKELISTS.TXT文件编写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CMAKELISTS.TXT文件编写相关的知识,希望对你有一定的参考价值。

参考技术A cmake使用

cmake是什么?

一.单目录单文件的编写方式

1.创建CMAKELISTS.TXT文件

     cmake_minimum_required(VERSION 3.17)   --版本号设置
     PROJECT(工程名)

  ---生成可执行文件

    ADD_EXECUTABLE(  目标文件(可执行文件)   依赖文件(.cpp))

二.单目录多个源文件的方式

需要添加AUX_SOURCE_DIRECTORY(./   DIR_SRCS)   ------将某个目录下的文件存储在某个变量内

需要修改的是ADD_EXEXUTABLE(目标文件     $DIR_SRCS )

三.多文件多目录----非标准与标准的方式

工程结构:

1.先编写里面的CMakeLists.txt文件

    AUX_SOURCE_DIRECTORY(. DIR_LIB_SRCS)

    add_library(MyLib $DIR_LIB_SRCS)#静态库

    #add_library(MyLib  SHARED $DIR_LIB_SRCS)  #动态库

2.编写外层CMAKELISTS.txt

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

【中文标题】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"

【讨论】:

以上是关于CMAKELISTS.TXT文件编写的主要内容,如果未能解决你的问题,请参考以下文章

CMAKELISTS.TXT文件编写

[forward] cmake, CMakeLists.txt梳理

CMake 找不到源文件,但在 TFS 构建定义中的 CMakeLists.txt 中未指定文件

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

在Android上部署深度学习模型之CMakeLists文件

CLion+CMake编写C++程序