gpt4 book ai didi

cmake - 运行cmake命令时如何加载环境文件(.env)?

转载 作者:行者123 更新时间:2023-12-04 07:14:51 25 4
gpt4 key购买 nike

是否有任何选项可以让我从 dotenv 文件加载键=值对?我知道我可以做到-E env key=value但是我有很多值,我想从 dotenv 文件中加载它们,因为其他工具可以从中加载环境变量。我不想做 bash 技巧,因为我希望它尽可能简单和跨平台。

最佳答案

没有对 dotenv 文件的内置支持,但这里有一个在纯 CMake 中的完整实现。对于您的 CMakeLists.txt,这是一个示例:

cmake_minimum_required(VERSION 3.21)
project(env-test NONE)

add_custom_target(
example
COMMAND
${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/env.cmake
${CMAKE_CURRENT_SOURCE_DIR}/.env # dotenv
env # command
)
这是 .env的内容文件:
foo=bar
bears=beets
battlestar=galactica
这是这项工作的演示:
$ cmake -G Ninja -S . -B build
$ cmake --build build --target example
...
foo=bar
bears=beets
battlestar=galactica
这是(复杂的) env.cmake实现这个的脚本:
cmake_minimum_required(VERSION 3.21)

if (CMAKE_ARGC LESS 5)
message(FATAL_ERROR "Usage: cmake -P env.cmake <dotenv> [command...]")
endif ()

set(dotenv "${CMAKE_ARGV3}")

if (NOT EXISTS "${dotenv}")
message(FATAL_ERROR "Dot-env file not found: ${dotenv}")
endif ()

set(command "")
math(EXPR argc "${CMAKE_ARGC} - 1")
foreach (i RANGE 4 ${argc})
list(APPEND command "${CMAKE_ARGV${i}}")
endforeach ()

file(STRINGS "${dotenv}" entries)
foreach (entry IN LISTS entries)
if (entry MATCHES "^([^=]+)=(.*)$")
set(ENV{${CMAKE_MATCH_1}} "${CMAKE_MATCH_2}")
else ()
message(FATAL_ERROR "Malformed dotenv entry:\n${entry}")
endif ()
endforeach ()

execute_process(COMMAND ${command} COMMAND_ERROR_IS_FATAL ANY)

关于cmake - 运行cmake命令时如何加载环境文件(.env)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68824042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com