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可以生成配置文件吗?的主要内容,如果未能解决你的问题,请参考以下文章