【问题标题】:CMake custom command to generate a non-config fileCMake 自定义命令生成非配置文件
【发布时间】:2021-12-11 08:21:33
【问题描述】:

我读过:

cmake custom command to copy and rename

我想做类似的事情,但不是复制文件,而是生成一个文件。如果那不在自定义命令中,我会写:

file(WRITE "generated.c" "int main() { return 0; }")

cmake -E 似乎并不直接支持这一点。我应该怎么做(除了运行依赖于平台的东西)?

【问题讨论】:

    标签: cmake add-custom-command


    【解决方案1】:

    使用 CMake 的脚本模式 (-P)。在CMakeLists.txt

    cmake_minimum_required(VERSION 3.21)
    project(test)
    
    file(
      GENERATE
      OUTPUT "gen.cmake"
      CONTENT [[
    cmake_minimum_required(VERSION 3.21)
    file(WRITE "${OUT}" "int main() { return 0; }")
    ]])
    
    add_custom_command(
      OUTPUT generated.c
      COMMAND ${CMAKE_COMMAND} -DOUT=generated.c 
              -P gen.cmake
      DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/gen.cmake"
    )
    
    add_executable(main "${CMAKE_CURRENT_BINARY_DIR}/generated.c")
    

    请注意,如果您生成的文件具有与配置相关的内容,那么您必须在文件名中的某处包含$<CONFIG>。有关详细信息,请参阅此处的文档:https://cmake.org/cmake/help/latest/command/file.html#generate

    【讨论】:

    • 我不能以某种方式内联我的脚本吗?
    • @einpoklum - 已编辑...这样您也可以在脚本中使用生成器表达式。
    • 啊,对,我应该想到的……不过这太令人费解了:-P
    • 将其集成到我的一个较大的脚本中,我无法防止重复生成 generated.c
    • ...我现在要求跟进。
    猜你喜欢
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多