作者Windycelesti (云の狐)
看板C_and_CPP
标题[问题] Makefile赋值问题
时间Thu Oct 21 17:50:13 2021
开发平台(Platform): (Ex: Win10, Linux, ...)
Linux
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
Makefile
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
Nope
问题(Question):
根目录底下刚开始有的档案
Makefile
Neko.bin
FUNCTION_0.txt
FUNCTION_1.txt
FUNCTION_2.txt
FUNCTION_3.txt
依照生出来的Cat.bin去决定我要把哪个FUNCTION给送出去
喂入的资料(Input):
直接执行make Makefile all
预期的正确结果(Expected Output):
原本的流程, Cat.bin是在这个Makefile才生出来的玩意儿
这里为了模拟, 所以多做了cp ./Neko.bin ./Cat.bin的动作, 然後拿Cat.bin做计算
TT的值预期会生出0~3随机数字(因为每次执行, Neko.bin的size都会改变)
预期在每次计算完Cat.bin的size後
选择对应的FUNCTION_$(1).txt送到其他资料夹去.(在此单纯用cp而已)
错误结果(Wrong Output):
all 的第四行目前没办法正常取出TT的值带入PATH的$(1)
曾经用过define去定义expr `du -b ./Cat.bin|cut -f1` % 4
想当然而程式看不懂
cp ./FUNCTIONexpr `du -b ./Neko_tmp.bin|cut -f1` % 4.txt ./YAAAAA.GG
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
#define TestDef
#expr `du -b ./Cat.bin|cut -f1` % 4
#endef
PATH=./FUNCTION_$(1).txt
all:
cp ./Neko.bin ./Cat.bin
expr `du -b ./Cat.bin|cut -f1` % 4 > TT
cat TT
# cp $(call PATH, $(call TestDef)) ./ YAAAAAA.GG
cp $(call PATH, echo`cat TT`) ./YAAAAA.GG
rm Cat.bin TT
echo "TEST END....."
如果有其他问题麻烦告知, 感谢.
另外想问问, 有没有可以模拟Makefile的模拟网页...(囧
感谢C_and_CPP版
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.163.51.192 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1634809815.A.7FA.html
1F:推 closer76: 总觉得你这些事情不需要用make来做...写 shell script 10/21 19:39
2F:→ closer76: 会不会比较快? 10/21 19:39
3F:推 closer76: 如果你真的需要makefile帮你产生cat.bin,也可以剩下的 10/21 19:47
4F:→ closer76: 动作写在shell script里,然後makefile就单纯call那个 10/21 19:47
5F:→ closer76: script 就好。不需要所有的事都用makefile完成。 10/21 19:48
6F:推 Schottky: 同意一楼,你要做的事完全没有使用到 Makefile 的机能 10/21 20:25
7F:→ Schottky: 把 all: 里面的指令全部放进 shell script 不就解决了? 10/21 20:26
8F:→ Schottky: Makefile 不是不能做到,但很容易让你的脑筋打结 10/21 20:27
先感谢各位给的建议, 也感谢下一篇的回文. (抱歉回晚了.)
我先前确实有考虑过用shell的方式
但是会碰上shell的内容会在all执行前先做..
以下是Makefile主程式码
PTTNum = $(shell expr `du -b ./Cat.bin|cut -f1` % 4)
PATH=./FUNCTION_$(1).txt
all:
cp ./Neko.bin ./Cat.bin
cp $(call PATH,$(PTTNum)) ./YAAAAA.GG
rm Cat.bin TT
echo "TEST END....."
以下是执行错误纪录
xxxx@TWPC:~$ make Makefile all
make: Nothing to be done for `Makefile'.
du: cannot access `./Cat.bin': No such file or directory
expr: syntax error
cp ./Neko.bin ./Cat.bin
cp ./FUNCTION_.txt ./YAAAAA.GG
cp: cannot stat `./FUNCTION_.txt': No such file or directory
make: *** [all] Error 1
不过我目前的认知, 所谓的"写动作在 shell script里"
应该是类似 peterbrucele 提供的例子
把 function = $(shell ~~~)写在同一个makefile内, 要用时再去call就好.
如果不是的话, 可能需要请教一下了.
感谢C_and_CPP版
※ 编辑: Windycelesti (118.163.51.192 台湾), 10/26/2021 14:56:37