Подтвердить что ты не робот

Cmake: Установить переменные среды из script

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

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? Если да, то как?


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

  • Я использую ELDK v 5.4, и он устанавливает script создает script, который устанавливает все переменные среды
  • Я нашел этот учебник, в котором объясняется, как вручную установить кросс-компиляцию, но не как использовать script, который устанавливает все
  • если я вызываю script перед настройкой cmake, все работает отлично, и я могу перекрестно скомпилировать, но мне бы хотелось, чтобы этот cmake вызывал script
4b9b3361

Ответ 1

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

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

В противном случае команда set в cmake script, вероятно, вам нужна, см. справочное руководство . Чтобы установить переменную переменной среды PATH, выполните:

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

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

set(variable "value")

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

Тем не менее, установка переменной окружения до вызова cmake часто является самым простым решением для решения проблемы, как в этом случае: fooobar.com/questions/238657/...

Ответ 2

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

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

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

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

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

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

Результат будет таким же, как при использовании файла toolchain.