在 VSCode 中自动设置 Yocto SDK 环境变量,以便与 CMake 进行交叉编译

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

我正在尝试使用 CMake 和 Yocto SDK 在 Ubuntu 上的 VSCode 中设置交叉编译环境。我需要确保在项目文件夹中运行 VSCode 之前设置必要的环境变量。目前,我通过在终端中运行以下命令来设置环境变量:

$ source /opt/poky/3.1.2/environment-setup-XxXxXx

如果没有这些环境变量,CMake 无法找到所需的依赖项。

我想知道是否可以在 VSCode 中自动执行此步骤,以便每次打开项目时都会自动设置必要的 Yocto SDK 环境变量。可以通过修改settings.json文件或者其他方法来实现吗?

更新#1

配置环境变量的脚本:

if [ ! -z "$LD_LIBRARY_PATH" ]; then
    echo "Your environment is misconfigured, you probably need to 'unset LD_LIBRARY_PATH'"
    echo "but please check why this was set in the first place and that it's safe to unset."
    echo "The SDK will not operate correctly in most cases when LD_LIBRARY_PATH is set."
    echo "For more references see:"
    echo "  http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html#AEN80"
    echo "  http://xahlee.info/UnixResource_dir/_/ldpath.html"
    return 1
fi

export SDKTARGETSYSROOT=/opt/poky/3.3.4/sysroots/corei7-64-poky-linux
export PATH=/opt/poky/3.3.4/sysroots/x86_64-pokysdk-linux/usr/bin:/opt/poky/3.3.4/sysroots/x86_64-pokysdk-linux/usr/sbin:/opt/poky/3.3.4/sysroots/x86_64-pokysdk-linux/bin:/opt/poky/3.3.4/sysroots/x86_64-pokysdk-linux/sbin:/opt/poky/3.3.4/sysroots/x86_64-pokysdk-linux/usr/bin/../x86_64-pokysdk-linux/bin:/opt/poky/3.3.4/sysroots/x86_64-pokysdk-linux/usr/bin/x86_64-poky-linux:/opt/poky/3.3.4/sysroots/x86_64-pokysdk-linux/usr/bin/x86_64-poky-linux-musl:$PATH
export PKG_CONFIG_SYSROOT_DIR=$SDKTARGETSYSROOT
export PKG_CONFIG_PATH=$SDKTARGETSYSROOT/usr/lib/pkgconfig:$SDKTARGETSYSROOT/usr/share/pkgconfig
export CONFIG_SITE=/opt/poky/3.3.4/site-config-corei7-64-poky-linux
export OECORE_NATIVE_SYSROOT="/opt/poky/3.3.4/sysroots/x86_64-pokysdk-linux"
export OECORE_TARGET_SYSROOT="$SDKTARGETSYSROOT"
export OECORE_ACLOCAL_OPTS="-I /opt/poky/3.3.4/sysroots/x86_64-pokysdk-linux/usr/share/aclocal"
export OECORE_BASELIB="lib"
export OECORE_TARGET_ARCH="x86_64"
export OECORE_TARGET_OS="linux"
unset command_not_found_handle
export CC="x86_64-poky-linux-gcc  -m64 -march=nehalem -mtune=generic -mfpmath=sse -msse4.2 -fstack-protector-strong  -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=$SDKTARGETSYSROOT"
export CXX="x86_64-poky-linux-g++  -m64 -march=nehalem -mtune=generic -mfpmath=sse -msse4.2 -fstack-protector-strong  -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=$SDKTARGETSYSROOT"
export CPP="x86_64-poky-linux-gcc -E  -m64 -march=nehalem -mtune=generic -mfpmath=sse -msse4.2 -fstack-protector-strong  -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=$SDKTARGETSYSROOT"
export AS="x86_64-poky-linux-as  "
export LD="x86_64-poky-linux-ld   --sysroot=$SDKTARGETSYSROOT"
export GDB=x86_64-poky-linux-gdb
export STRIP=x86_64-poky-linux-strip
export RANLIB=x86_64-poky-linux-ranlib
export OBJCOPY=x86_64-poky-linux-objcopy
export OBJDUMP=x86_64-poky-linux-objdump
export READELF=x86_64-poky-linux-readelf
export AR=x86_64-poky-linux-ar
export NM=x86_64-poky-linux-nm
export M4=m4
export TARGET_PREFIX=x86_64-poky-linux-
export CONFIGURE_FLAGS="--target=x86_64-poky-linux --host=x86_64-poky-linux --build=x86_64-linux --with-libtool-sysroot=$SDKTARGETSYSROOT"
export CFLAGS=" -O2 -pipe -g -feliminate-unused-debug-types "
export CXXFLAGS=" -O2 -pipe -g -feliminate-unused-debug-types "
export LDFLAGS="-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -Wl,-z,relro,-z,now"
export CPPFLAGS=""
export KCFLAGS="--sysroot=$SDKTARGETSYSROOT"
export OECORE_DISTRO_VERSION="3.3.4"
export OECORE_SDK_VERSION="3.3.4"
export ARCH=x86
export CROSS_COMPILE=x86_64-poky-linux-

# Append environment subscripts
if [ -d "$OECORE_TARGET_SYSROOT/environment-setup.d" ]; then
    for envfile in $OECORE_TARGET_SYSROOT/environment-setup.d/*.sh; do
        . $envfile
    done
fi
if [ -d "$OECORE_NATIVE_SYSROOT/environment-setup.d" ]; then
    for envfile in $OECORE_NATIVE_SYSROOT/environment-setup.d/*.sh; do
        . $envfile
    done
fi

visual-studio-code cmake yocto
2个回答
0
投票

为了使 VsCode/CMake 能够找到必要的依赖项,我在项目的

cmake-kits.json
文件夹中创建了一个
.vscode
文件。该文件用作 CMake 套件的配置。这是一个示例 cmake-kits.json 文件:

[
  {
    "name": "Yocto-Poky: GCC 10.3.0 x86_64-poky-linux",
    "compilers": {
      "C": "/opt/poky/3.3.4/sysroots/x86_64-pokysdk-linux/usr/bin/x86_64-poky-linux/x86_64-poky-linux-gcc",
      "CXX": "/opt/poky/3.3.4/sysroots/x86_64-pokysdk-linux/usr/bin/x86_64-poky-linux/x86_64-poky-linux-g++"
    },
    "environmentSetupScript": "/opt/poky/3.3.4/environment-setup-corei7-64-poky-linux",
    "toolchainFile": "/opt/poky/3.3.4/sysroots/x86_64-pokysdk-linux/usr/share/cmake/OEToolchainConfig.cmake"
  }
]

0
投票

pmundt的回答几乎是正确的。 如果您的编译器有额外的标志并且构建需要这些标志,那么 CMake 将不会使用它们,例如:

arm-dbox-linux-gnueabi-gcc -mthumb -mfpu=neon-vfpv4 -mfloat-abi=hard -mcpu=cortex-a7 -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security

由于environmentSetupScript将设置我的情况所需的所有内容,因此我没有添加“编译器”部分,然后CMake就能够配置项目。

所以我用了:

[
  {
    "name": "Yocto-Poky: GCC 10.3.0 x86_64-poky-linux",
    "environmentSetupScript": "/opt/poky/3.3.4/environment-setup-corei7-64-poky-linux",
    "toolchainFile": "/opt/poky/3.3.4/sysroots/x86_64-pokysdk-linux/usr/share/cmake/OEToolchainConfig.cmake"
  }
]
© www.soinside.com 2019 - 2024. All rights reserved.