CMake可以生成配置文件吗?

Posted

技术标签:

【中文标题】CMake可以生成配置文件吗?【英文标题】:Can CMake generate a configure file? 【发布时间】:2012-02-11 19:31:45 【问题描述】:

我需要将配置文件从 C++ 转换为 JS,我正在尝试在项目中使用 emscripten。 Emscripten 带有一个名为 emconfigure 的工具,它取代了 autoconf 配置,

但是我正在构建的项目使用 cmake 作为构建系统,并且目前(1 月 12 日)emscripten 仅支持 autoconf - 所以我通过生成配置并在 make 上做一个端口来绕过它,所以有一个从 cmake 创建配置文件的方法?我不是在谈论 make 文件.. 而是 configure 文件本身。

【问题讨论】:

顺便说一下你想翻译的语言。你能说得更具体点吗? 这个问题不清楚。 CMake 无法像 autoconf 那样生成名为 configure 的脚本 - 它以不同的方式执行类似的工作。但它可以对源树中的文件进行配置操作。正在进行什么语言的翻译? emscripte 跟什么有什么关系? 【参考方案1】:

是的,它可以:

configure_file(<input> <output>
               [COPYONLY] [ESCAPE_QUOTES] [@ONLY]
               [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])

Example.h.in

#ifndef EXAMPLE_H
#define EXAMPLE_H

/*
 * These values are automatically set according to their cmake variables.
 */
#define EXAMPLE "$EXAMPLE"
#define VERSION "$VERSION"
#define NUMBER  $NUMBER

#endif /* EXAMPLE_H */

在您的 cmake 文件中:

set(EXAMPLE "This is an example")
set(VERSION "1.0")
set(NUMBER 3)

configure_file(Example.h.in Example.h)

配置Example.h:

#ifndef EXAMPLE_H
#define EXAMPLE_H

/*
 * These values are automatically set according to their cmake variables.
 */
#define EXAMPLE "This is an example"
#define VERSION "1.0"
#define NUMBER  3

#endif /* EXAMPLE_H */

文档:

CMake 3.0 CMake 2.8.12

【讨论】:

如果变量评估为假,CMake 将取消定义。例如如果数字为 0,则不会定义它。有没有办法解决这个问题?我只是使用 ifndef 来解决它。 您使用的是#cmakedefine 还是普通的#define?后者不应该这样做。如果还是不行,可以在模板文件中添加#ifnedf ... #define ... 非常有帮助²。谢谢!【参考方案2】:

是的,cmake 会根据您的目标平台为您生成构建项目所需的文件。但是您需要自己为 CMake 编写 CMakelist.txt 文件,或者您必须从其他人那里获取它们。如果 emscripten 有它们并且您已经安装了 cmake,请转到您的源目录的根目录并启动 cmake 以查看您可以使用的参数列表

【讨论】:

【参考方案3】:

实际上,不要生成“集合”,但您可以使用函数来完成他所做的所有事情,例如 vereficação 数据类型、vereficar 标头等。

好吧,我将链接到包含所有这些功能的我的项目。我建议研究一下,有什么给我发邮件什么的来回答你的问题。

Here

检查 /deps/cmake 文件夹以查看我们创建的函数。

【讨论】:

【参考方案4】:

Cmake 是一个构建系统。它生成 Makefile。查看here 了解更多信息。但是要简短地回答您的问题,您不能使用 cmake 生成配置文件。

【讨论】:

以上是关于CMake可以生成配置文件吗?的主要内容,如果未能解决你的问题,请参考以下文章

Mac+VScode配置CMake编译HelloWorld

CMake 没有生成 Make 文件

CMake 为 Win32 和 x64 生成 Visual Studio 2008 解决方案

CMake 多配置生成器使用错误的构建目录

cmake去除libmt

如何配置 CMake 目标或命令来预处理 C 文件?