Quero definir uma opção de compilação -DVAR=xxx
. Eu sei que posso fazer isso, target_compile_options
mas meu problema é que o valor xxx
deve ser gerado dinamicamente e só está disponível como conteúdo de um arquivo txt.
Aqui está minha tentativa:
- crie um comando personalizado que gere o arquivo contendo o valor a ser usado
- crie um destino personalizado que permita construir o
var.txt
arquivo - crie uma dependência para ter certeza de que
var.txt
será gerado antes da compilação doMyExe
mas não sei como recuperar o valor necessário do arquivo e usá-lo em target_compile_options
.
cmake_minimum_required(VERSION 3.13)
project ("MyProject")
add_custom_command (
OUTPUT var.txt
COMMAND echo "123" > var.txt # just an example here, the real generation is more complex
COMMENT "Generate variable value"
)
add_executable (MyExe main.cpp)
target_compile_options (MyExe PUBLIC -DVAR=???) # how to get the content of "var.txt" for setting VAR ?
add_custom_target (var ALL DEPENDS var.txt)
add_dependencies (MyExe var)
É possível target_compile_options
usar valores recuperados de um arquivo gerado?
Sim, mas sem viagem no tempo.
add_custom_command
é executado no estágio de construção, as opções de compilação são definidas no estágio de configuração e o estágio de configuração é executado antes do estágio de construção. Veja a introdução do cmake.Você pode executar o comando
execute_process
e analisá-lo na linguagem CMake (considere JSON) e extrair sinalizadores de compilação durante o estágio de configuração no CMake e configurá-los normalmente comtarget_compile_definitions
.