makefile - Makefile 中的变量替换会产生意想不到的结果
问题描述
我有一个 Makefile:
FOO=one two
$(FOO):
echo $@
现在我运行:
make one
并得到echo one
make two
并得到echo two
make three
并得到一个错误
这是意料之中的。
但是,当我将 Makefile 更改为:
FOO=one two
$(FOO)$(FOO):
echo $@
还是一样!
我希望我必须输入make oneone
,但事实并非如此。
这是为什么?
解决方案
因为make
信任地粘贴您提供的任何内容作为内容。取决于行中不可见的其余部分,FOO=one two...
即是否有空格,您正在生产one twoone two
or one two one two
。我认为后者不是非法的,但会产生类似target given more than once in same line
.
推荐阅读
- hyperparameters - 警告“未知或未初始化的列:`ntree`。” 当尝试使用包 mlr 将超参数传递给学习者时
- python - 使用基于行值的列创建新数据框
- node.js - 找不到与 @typescript-eslint/scope-manager@4.22.1 匹配的版本
- lucene - 可以将 boost 应用于 Lucene 字段吗?
- javascript - 为什么 MutationObserver 不适用于 FullCalendar 中的标题更改?
- css - 如何在drupal 8中将所有外部css文件组合成一个文件
- javascript - TypeScript 对象数组搜索
- amazon-web-services - Amazon SQS 与 Kafka 组
- reactjs - 如何在 React 中将 JSX 附加到 DOM?
- sql - 从列中删除一个数据元素