【问题标题】:How to use CMake to generate C++ code when not using configure_file?不使用configure_file时如何使用CMake生成C++代码?
【发布时间】:2018-10-01 18:19:04
【问题描述】:

我的CMake 脚本在我的 C++ 代码中生成了一些我想要的信息。这些信息是我希望用户能够看到的一些文本。

我知道我可以在我的 C++ 代码中定义变量,例如:@mySpecialVariable@。如果这些变量是由 CMake 定义的,那么在使用 configure_file 时,源文件会被 CMake 定义的 mySpecialVariable 的值修改。

我的问题是我从不使用configure_file。我的构建目录与我的源目录是分开的,但源文件永远不会从源目录复制(即configure_file)到构建目录中。

在不使用configure_file 的情况下有没有办法做到这一点?

【问题讨论】:

  • 我不清楚为什么需要避免使用configure_file。如果这是问题所在,它不必将其结果放在构建目录中(看起来可能是这样?)
  • 我不能使用configure_file,因为构建系统相当复杂,我不能搞乱它目前的工作方式。
  • 在此处查看接受的答案。如果不出意外,它会给你一些谷歌的东西。你想设置一个预处理器宏。我从来没有将它用于字符串,但看起来这是可行的:stackoverflow.com/questions/9639449/…
  • 真的很难理解,你想从我们这里得到什么。您说您有一些 文本生成问题,但对这个问题的唯一描述是configure_file 可以工作……但由于未知原因 而不能工作。有了这么少的信息,您要求我们提出一些建议。 (你没有描述为什么configure_file 不适合你并不是责备。你的问题本身并不清楚。)
  • @zzxyz 感谢您的尝试。我也在尝试各种事情,但没有运气。我想我会尝试调整我们的构建系统,看看我是否能让它以这种方式工作。

标签: c++ cmake configure


【解决方案1】:

CMake 3.12 有一个名为add_compiler_definitions 的新函数,它应该可以满足您的需求。

最小示例:

CMakeLists.txt

cmake_minimum_required(VERSION 3.12)
project(cmake_text)
set(MyCMakeVar "MySpecialText")
add_compile_definitions(CMAKE_TEXT="${MyCMakeVar}")
add_executable(cmake_text main.cpp)

main.cpp

#include <iostream>

int main(int argc, char** argv)
{
#ifdef CMAKE_TEXT
    std::cout << "Cmake defined following text: " << CMAKE_TEXT << std::endl;
#else
    std::cout << "CMake did not define any text!" << std::endl;
#endif
    return 0;
}

标准输出的输出将是:

Cmake 定义了以下文本:MySpecialText

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 2018-05-19
    相关资源
    最近更新 更多