【发布时间】:2019-01-20 23:13:09
【问题描述】:
这让我感到非常困扰,让我完全难过。我觉得找到答案会有一些很好的学习机会,所以希望它是相关的。
我使用 Vim 进行嵌入式 C 开发,并使用 Arduino 设置了业余爱好者的东西(使用 Arduino Makefile)。我使用:make 和一些构建项目的快捷方式。
外部定义解析项目级 Makefile 中的 Arduino Makefile 根目录:'ARDMK_DIR=/usr/local/opt/arduino-mk'。这被定义为我的 shell (zsh) 中的导出。这就是奇怪的地方:
- 在 shell 提示符下使用
make可以正常构建项目:
make -d
This program built for i386-apple-darwin11.3.0
Reading makefiles...
Reading makefile `Makefile'...
Reading makefile `/usr/local/opt/arduino-mk/Arduino.mk' (search path) (no ~ expansion)...
- 但是,在 Vim 中使用
:make,定义变成了旧安装的东西:
:make
This program built for i386-apple-darwin11.3.0
Reading makefiles...
Reading makefile `Makefile'...
Reading makefile `/usr/local/Cellar/arduino-mk/1.5.2/Arduino.mk' (search path) (no ~ expansion)...
Makefile:24: /usr/local/Cellar/arduino-mk/1.5.2/Arduino.mk: No such file or directory
我终生无法找到将 ARDMK_DIR 重新定义为“/usr/local/Cellar/arduino-mk/1.5.2”的位置。我尝试过的事情:
-
setlocal makeprg=echo\ $ARDMK_DIR\ &&\ make\ -d\: echo 用我的 shell 定义 (/usr/local/opt/arduino-mk) 返回,但make失败并出现上述错误!! -
:echo $ARDMK_DIR: 再次返回我的 shell 定义。 -
ag我的 ARDMK_DIR 主目录,唯一定义它的地方是我的 shell 导出。因为我的根目录和同样的事情。 $VIMRUNTIME 也是如此 - 即使 vim-disptach 调用相同的
makeprg?! 也能正常工作
- 在项目 Makefile 中重新定义
ARDMK_DIR。一切都按预期构建。但是我不想这样做,因为我使用不同的系统进行编译。 - 相同的 vim 配置在其他 macOS 和 Linux 系统上也能正常工作。
在echo 和make 的实际执行之间的某个位置,正在重新定义 ARDMK_DIR。为什么以及任何人都可以想出一种方法来找出并解决这个问题?
【问题讨论】:
-
set shell?的输出是什么。 -
shell=/usr/local/bin/zsh - 如
echo所示,我的环境正在正确导出到vim shell。 -
就是这样!在
.zshenv中有一个额外的ARDMK_DIR导出。我的ag搜索缺少--hidden标志:facepalm:所以没找到。无论如何,我没有意识到.zshenv在每个新生成时都会被读取 - 这解释了为什么 vim 在.zshrc中导出我的导出但启动make来源.zshenv,它覆盖了它。谢谢! -
我刚刚删除了我的评论,因为我认为我的测试用例是错误的:-)。很高兴我能帮上忙。