cmake: установка переменных среды из скрипта

у меня есть скрипт, который устанавливает все переменные, необходимые для кросс-компиляции. Вот только часть его:

export CONFIG_SITE=~/workspace/eldk-5.4/powerpc/site-config-powerpc-linux
export CC="powerpc-linux-gcc  -m32 -mhard-float --sysroot=~/workspace/eldk-5.4/powerpc/sysroots/powerpc-linux"
export CXX="powerpc-linux-g++  -m32 -mhard-float --sysroot=~/workspace/eldk-5.4/powerpc/sysroots/powerpc-linux"
export CPP="powerpc-linux-gcc -E  -m32 -mhard-float --sysroot=~/workspace/eldk-5.4/powerpc/sysroots/powerpc-linux"
export AS="powerpc-linux-as "
export LD="powerpc-linux-ld  --sysroot=~/workspace/eldk-5.4/powerpc/sysroots/powerpc-linux"
export GDB=powerpc-linux-gdb

Если я делаю source environment-setup-powerpc-linux, все переменные среды импортируются в текущий сеанс оболочки, и я могу скомпилировать свой пример.

можно ли импортировать эти переменные в CMake? Если да, то как?


немного подробнее :

  1. я использую ELDK v 5.4, и это сценарий установки генерирует сценарий который устанавливает все переменные среды
  2. нашел в этом уроке, который объясняет, как вручную установить для кросс-компиляции, но не как использовать скрипт, который устанавливает все
  3. если я вызываю скрипт перед установкой cmake, все работает нормально, и я могу скомпилировать, но я хотел бы, чтобы cmake вызывал скрипт

2 ответов


чтение cmake быстрый старт, можно указать переменную в командной строке:

cmake -DVARIABLE1=value1 -DVARIABLE2=value2 ...

иначе set команда в сценарии cmake, вероятно, то, что вы хотите, см. справочник. Установить переменные среды путь, не так:

set(ENV{PATH} "/home/martink")

чтобы установить нормальную переменную, выполните:

set(variable "value")

не уверен, какие из них вы должны установить, вероятно, в окружающей среде.

что сказал, настройка переменной среды перед вызовом cmake часто является самым простым решением для решения проблемы, как в этом случае:https://stackoverflow.com/a/15053460/684229


единственный способ установить компилятор и флаги для надежной кросс-компиляции с CMake - это файл toolchain, как это сделано в учебнике, который вы нашли.

когда мы столкнулись с той же проблемой, что и у вас (инструментарий, который создает скрипт, поэтому устанавливает среду компиляции), мы изменили инструментарий таким образом, что он создает файл toolchain вместе со скриптом.

на самом деле cmake-toolchain-файл меняется не так часто. Основные флаги, используемые для цели, фиксированы довольно рано в проекте - нормально. И с-Х-Х CMAKE_BUILD_TYPE вы можете переключаться между компиляциями Debug и Release без изменения файла toolchain.

Если у вас есть разные цели для поддержки, создайте другую цепочку инструментов и используйте сборку вне источника с CMake.

редактировать: одна вещь, которую вы можете сделать, это вызвать cmake С-D-аргументом, устанавливающим переменные, которые вы хотите, и получив свой скрипт раньше:

source environment-setup-powerpc-linux
cmake -DCMAKE_C_COMPILER=$CC -DCMAKE_CXX_COMPILER=$CXX etc

результат будет идентично использованию toolchain-файла.