my_test:
ifdef $(toto)
@echo 'toto is defined'
else
@echo 'no toto around'
endif
Run Code Online (Sandbox Code Playgroud)
$ make my_test
no toto around
$ make my_test toto
toto is defined
Run Code Online (Sandbox Code Playgroud)
$ make my_test
no toto around
$ make my_test toto
no toto around
make: *** No rule to make target `toto'. Stop.
Run Code Online (Sandbox Code Playgroud)
当我运行时,make my_test我按预期得到 else 文本no toto around。然而
make my_test toto
no toto around
make: *** No rule to make target `toto'. Stop.
Run Code Online (Sandbox Code Playgroud)
生成文件版本
$ make -v …Run Code Online (Sandbox Code Playgroud) 当我make config在终端中输入时,系统响应:
make: *** No rule to make target `config'. Stop.
Run Code Online (Sandbox Code Playgroud)
知道如何解决这个问题吗?
我正在学习如何使用make和生成文件,所以我写了这个小文件:
%.markdown: %.html
pandoc -o $< $@
Run Code Online (Sandbox Code Playgroud)
但是当我运行时make,我得到的只是make: *** No targets. Stop.发生了什么?
当我尝试在 64 位 Fedora 16 (Verne) 上构建嵌入式 Linux 目标时出现以下错误:
make[3]: Entering directory `/export/home/git/minerva-5.x/third_party/multifiles'
mips-linux-gnu-gcc -EL -O -D_GNU_SOURCE -Wall -isystem /export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/include -c -o md5.o md5.c
mips-linux-gnu-gcc -EL -O -D_GNU_SOURCE -Wall -isystem /export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/include -c -o bitmapfs.o bitmapfs.c
mips-linux-gnu-gcc -EL -O -D_GNU_SOURCE -Wall -isystem /export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/include -c -o mfcln.o mfcln.c
mips-linux-gnu-gcc -EL -Wl,-rpath /export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/lib -L/export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/lib -o mfcln md5.o bitmapfs.o mfcln.o mulfiles.h mulfiles_msg.h md5.h bitmapfs.h
gcc -O -Wall -m32 -c -o md5_x86_32.o md5.c
gcc -O -Wall -m32 -c -o mfsrv_x86_32.o mfsrv.c
gcc -O -m32 -o …Run Code Online (Sandbox Code Playgroud) 今天早些时候,建设东西的时候,我决定运行make为
$ make -j
Run Code Online (Sandbox Code Playgroud)
也许是出于与其他软件的习惯,如cabal其中-j默认为一个合理的限度。
大约 20 秒后,我的整个桌面都停止了。我寻找各种活动迹象。没有粉丝旋转。HDD 指示灯呈稳定的绿色,但我没有听到磁盘活动。嗯嗯。沉默了 10 分钟后,我终于看到了我很久以前第一次按键的反应,并且我也开始听到非常熟悉的磁盘抖动声音。20 分钟后,我慢慢地尝试涉水进入这台没有响应的机器上的终端,我屈服并使用了 REISUB。
起初,我认为一个不相关的桌面应用程序一定是罪魁祸首,因为我早就对交互式 bash 会话设置了内存限制,以防止我将自己置于这种情况!但/var/log/syslog讲述了一个不同的故事;在OOM杀手留下一些ps垃圾场被怀疑的包装与c++和cc1plus流程!
以下是其中一个转储的频率分析:
Command Number of appearances
'sh' 322
'c++' 321
'cc1plus' 321
'chrome' 27
'make' 27
'bash' 3
all else combined 120
Run Code Online (Sandbox Code Playgroud)
所以我检查了 GNU make 的手册页:(强调)
-j [jobs], --jobs[=jobs] 指定要同时运行的作业(命令)的数量。如果有多个 -j 选项,则最后一个有效。 如果 -j 选项不带参数给出,make 将不会限制可以同时运行的作业数量。
我不愿意看到我是否能重现该问题(医生,我这样做时,它会伤害这个 …
是否有一种通用的方式来运行 bash 脚本并查看生成的命令,但实际上并不运行这些命令——即某种“试运行”/模拟器?
我有一个我希望运行的数据库安装脚本(实际上是在运行 ./configure 和 make 之后“make install”),但它正在安装我不想要的各种东西。
所以我想要一种方法,在我真正运行它之前确切地看到它要做什么 - 甚至可以手动运行命令。
是否有任何实用程序可以执行此类任务(或任何相关/类似的任务)?
在 bash 提示符下,可以使用伪文件执行 diff:
diff <(echo test) <(echo test)
Run Code Online (Sandbox Code Playgroud)
将其按原样添加到 Makefile 失败:
all:
diff <(echo test) <(echo test)
Run Code Online (Sandbox Code Playgroud)
错误(提示:/bin/sh 指向此系统上的 /bin/bash):
/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `diff <(echo test) <(echo test)'
Run Code Online (Sandbox Code Playgroud)
这是什么意思,有没有办法在不使用临时文件的情况下仍然区分两个输出?
我有一个 Makefile,它有一个变量,如果变量未设置或设置但具有空值,则该变量需要具有默认值。
我怎样才能做到这一点?
我需要这个,因为我在 shell 脚本中调用 make 并且 makefile 所需的值可以作为 $1 从 shell 传递。并将其传递给 makefile,我必须将其设置在 bash-script 中。
想法:(不优雅)在 bash 脚本内部,可以检查变量是否已设置但具有空值,在这种情况下可以取消设置。
注意:如果变量未在终端中定义,以下将不起作用,因为它们是在 bash 脚本中设置的。
dSourceP?=$(shell pwd)
Source?=$(notdir $(wildcard $(dSourceP)/*.md))
Run Code Online (Sandbox Code Playgroud)
make all dSourceP="${1}" Source="${2}"
Run Code Online (Sandbox Code Playgroud)
bash ./MyScript.sh
bash ./MyScript.sh /home/nikhil/MyDocs
bash ./MyScript.sh /home/nikhil/MyDocs index.md
Run Code Online (Sandbox Code Playgroud) 我使用的Makefile默认步骤是打印其他选项的帮助文档。EOF如果我可以添加一个部分而不是多个,那就太好了echo。是否可以EOF像Makefilebash 脚本一样使用它?
我开始使用org-mode在GTD风格的系统中规划我的任务。将每个 org 文件放在Dropbox文件夹的目录中,我运行 emacs 来编辑/管理来自三个不同本地机器的这些文件:Cygwin、Mac OS X 和 Debian。由于我还使用MobileOrg从我的 iPad 访问这些组织文件,因此checksums.dat在进行任何更改时,文件必须保持最新。这可以通过运行来完成md5sum *.org > checksums.dat。
问题是命令有三种不同的md5sum命令:md5sum.exe在 Cygwin、md5Mac OS X 和md5sumDebian 中。最理想的情况是生成文件,存储在 Dropbox 文件中,检测当前机器中可用的命令并运行该命令来执行 md5 校验和操作。