CMake - 在构建期间从文件内容设置变量

问题描述 投票:0回答:1

我想为第 3 方脚本(下面示例中的 gen_source.py)生成随机种子,该脚本希望将其作为命令行参数。到目前为止,我只能在配置阶段生成种子。有没有办法在构建阶段从文件传递种子值?请注意,我无法更改 gen_source.py 脚本。另外,我需要避免每次都重新生成种子,因此我使用了 CMake 缓存,它工作得很好,并且允许在需要时重新生成种子。但我认为如果我能够在构建期间执行此示例,这将使我的代码更清晰。

execute_process(COMMAND bash -c "hexdump -v -e '1/1 \"%02X\"' -n 16 /dev/urandom"
        OUTPUT_VARIABLE SEED)
execute_process(COMMAND bash -c "echo seed = ${SEED}")
add_custom_command(
  OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/my_header.h"
  COMMAND python3 "${CMAKE_CURRENT_SOURCE_DIR}/gen_source.py" ${SEED}
)
cmake
1个回答
0
投票

有没有办法在构建阶段从文件传递种子值?

所以只需使用 add_custom_command 而不是执行进程。

add_custom_command(
   OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/seed.txt
   COMMAND bash -c "hexdump -v -e '1/1 \"%02X\"' -n 16 /dev/urandom > ${CMAKE_CURRENT_BINARY_DIR}/seed.txt
)
add_custom_command(
  OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/my_header.h"
  COMMAND bash -c "python3 ${CMAKE_CURRENT_SOURCE_DIR}/gen_source.py "$(cat ${CMAKE_CURRENT_BINARY_DIR}/seed.txt)""
)

一些引用修复会很好,例如:

add_custom_command(
   OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/seed.txt
   COMMAND sh -c
      "hexdump -v -e '1/1 \"%02X\"' -n 16 /dev/urandom > \"$1\""
      --
      "${CMAKE_CURRENT_BINARY_DIR}/seed.txt"
)
add_custom_command(
  OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/my_header.h"
  DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/seed.txt"
  COMMAND sh -c
      "python3 \"$1\" \"$(cat \"$2\")\""
      --
      "${CMAKE_CURRENT_SOURCE_DIR}/gen_source.py"
      "${CMAKE_CURRENT_BINARY_DIR}/seed.txt"
)
© www.soinside.com 2019 - 2024. All rights reserved.