如何配置crosstool-ng从生成的工具链名称中删除供应商名称。

例如,创建臂交叉工具链而不指定供应商零件将导致以下命名输出



如果我为“linaro”提供了一个供应商,那么我将得到一个输出,例如



我想要的是使crosstool-ng输出如下名称



我知道您可以使用menuconfig中的这些功能使用“Tuple的sed变换”和“Tuple的别名”,但是这些仅创建到arm-unknown-gnueabihf-g++等的符号链接(symbolic link)。

我有一个正在玩的板子附带的工具链,这些工具链中省略了供应商的部分。所以我的问题是“他们怎么做到的?”

最佳答案

即使文档指出:



(请参阅http://crosstool-ng.github.io/docs/configuration/)

如果未给出CT_TARGET_VENDOR的值,则当前行为将变为“未知”。

早在2011年,在crosstool-ng邮件列表中就讨论了这种情况,并且提供了一个补丁,其中包含一个可能对您有帮助的解决方案。

该补丁的目的是:



在crosstool-ng源代码的脚本/函数中。

另请:https://sourceware.org/ml/crossgcc/2011-10/msg00047.html

diff -r a31d097e28cd -r 5b1330e7264a scripts/functions
--- a/scripts/functions Wed Oct 19 15:27:32 2011 +1300
+++ b/scripts/functions Wed Oct 19 16:23:36 2011 +1300
@@ -944,6 +944,20 @@
     fi
 }

+# Computes the target tuple from the configuration and the supplied
+# vendor string
+CT_BuildOneTargetTuple() {
+    local vendor="${1}"
+    local target
+
+    target="${CT_TARGET_ARCH}"
+    target="${target}${vendor:+-${vendor}}"
+    target="${target}${CT_TARGET_KERNEL:+-${CT_TARGET_KERNEL}}"
+    target="${target}${CT_TARGET_SYS:+-${CT_TARGET_SYS}}"
+
+    echo "${target}"
+}
+
 # Compute the target tuple from what is provided by the user
 # Usage: CT_DoBuildTargetTuple
 # In fact this function takes the environment variables to build the target
@@ -994,10 +1008,7 @@
     CT_DoKernelTupleValues

     # Finish the target tuple construction
-    CT_TARGET="${CT_TARGET_ARCH}"
-    CT_TARGET="${CT_TARGET}${CT_TARGET_VENDOR:+-${CT_TARGET_VENDOR}}"
-    CT_TARGET="${CT_TARGET}${CT_TARGET_KERNEL:+-${CT_TARGET_KERNEL}}"
-    CT_TARGET="${CT_TARGET}${CT_TARGET_SYS:+-${CT_TARGET_SYS}}"
+    CT_TARGET=$(CT_BuildOneTargetTuple "${CT_TARGET_VENDOR}")

     # Sanity checks
     __sed_alias=""
@@ -1012,7 +1023,14 @@
     esac

     # Canonicalise it
-    CT_TARGET=$(CT_DoConfigSub "${CT_TARGET}")
+    if [ -n "${CT_TARGET_VENDOR}" ]; then
+        CT_TARGET=$(CT_DoConfigSub "${CT_TARGET}")
+    else
+        # Canonicalise with a fake vendor string then strip it out
+        local target=$(CT_BuildOneTargetTuple "CT_INVALID")
+        CT_TARGET=$(CT_DoConfigSub "${target}" |sed -r -s s:CT_INVALID-::)
+    fi
+
     # Prepare the target CFLAGS
     CT_ARCH_TARGET_CFLAGS="${CT_ARCH_TARGET_CFLAGS} ${CT_ARCH_ENDIAN_CFLAG}"
     CT_ARCH_TARGET_CFLAGS="${CT_ARCH_TARGET_CFLAGS} ${CT_ARCH_ARCH_CFLAG}"

09-28 06:47