我正在编写一个 makefile,它将在编译结束时清理一些无用的文件。如果已经创建了一个目标,它当然会跳过该目标,而无用的文件可能不存在。所以如果我这样做:
rm lexer.ml interpparse.ml interpparse.mli
Run Code Online (Sandbox Code Playgroud)
我可能会收到错误,因为其中一个文件不存在。有没有办法告诉rm忽略这些文件?
在阅读手册页时,我看到以下选项:
-f Attempt to remove the files without prompting for confirma-
tion, regardless of the file's permissions. If the file does
not exist, do not display a diagnostic message or modify the
exit status to reflect an error. The -f option overrides any
previous -i options.
Run Code Online (Sandbox Code Playgroud)
这听起来几乎是我想要的,但我不太确定权限部分。有没有办法做到这一点?
为了运行make文件,我应该转到make文件的目录,从那里我只能运行make文件。即使我在任何目录中,我该如何做?
我使用的是 Mac OSX 10.7.5,.vimrc 的内容如下:
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
set shiftround
set smarttab
set autoindent
set copyindent
autocmd FileType make setlocal noexpandtab
Run Code Online (Sandbox Code Playgroud)
我想要做的是,当我编辑 .js、.html 等普通文件时,我希望我的制表符缩进 4 个空格而不是普通制表符。
但是当我编辑 Makefile 时,我需要它是一个普通的制表符,而不是 4 个用于缩进的空格。
我认为 .vimrc 中的上述设置会给我这个,但对我不起作用,因为当我编辑 Makefile 时,我仍然得到 4 个空格用于缩进。
不确定我在这里做错了什么?
我有一个使用 make 文件进行编译的 LaTeX 项目,并且想使用 Kile 在 Windows 上编写文本。
我在 google 上快速浏览了一下,但只是真正想出了Make for Windows,它的最后一个版本可以追溯到 2006 年。也许它做得非常好且稳定,但我仍然想知道:
在 Windows 上使用 makefile 的替代方法有哪些(如果有的话)?
在理想情况下,我想将该工具配置到 Kile(它在 Windows 上运行,是的)并从那里运行它。
test:
@echo "#!/bin/bash\njava -classpath \"$(CLASSPATH)\" com.atm.ATM \"$@\"" > test
@chmod a+x test
Run Code Online (Sandbox Code Playgroud)
我试图转义“$@”,以便它在“测试”脚本中以“$@”字面出现(将在 bash 脚本上调用的参数传递给 java 程序)。
我尝试过的事情:
"$$@" -> ""
"$$@@" -> "@"
"$@@" -> "<target>@"
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
我不久前开始安装 HPL 并有一个相关的问题。我一直在关注Intel 的本指南。我认为这值得一个全新的。当我尝试制作存档时,输出看起来很好,直到最后,它给出了错误。
make[2]: Entering directory `/hpl-2.0/src/auxil/intel64'
Makefile:47: Make.inc: No such file or directory
make[2]: *** No rule to make target `Make.inc'. Stop.
make[2]: Leaving directory `/hpl-2.0/src/auxil/intel64'
make[1]: *** [build_src] Error 2
make[1]: Leaving directory `/hpl-2.0'
make: *** [build] Error 2
Run Code Online (Sandbox Code Playgroud)
转到目录会/hpl-2.0/src/auxil/intel64显示一个文件“Make.inc”,但它突出显示为红色,并且白色文本闪烁。
有没有办法手动制作该文件?我需要做什么才能让 makefile 为我做这件事?
例如,如果我正在开发一个仅限前端的网站,我可能有几个CoffeeScript文件、几个Sass文件、几个 HTML 文件和一些图像。
CoffeeScript 文件需要编译为 JavaScript,Sass 文件需要编译为 CSS,这些新文件需要缩小。图像需要删除其元数据。所有生成的文件都需要移动到具有自己结构的新目录中。
这一切似乎都不是特别复杂,但我看到有几个人为此使用makefile。
我是不是太不愿意学习如何使用 makefile?与简单的 bash 脚本相比,它们有哪些优势?
我正在尝试创建一个 Makefile 来自动重新制作 Knoppix 发行版。
我正在尝试将文件系统从只读压缩循环设备复制到普通文件系统,以便能够修改它,然后压缩它以替换旧的文件系统。这就是 Knoppix 重新制作的意义所在。我必须保留有关文件系统的所有详细信息,从一个文件系统到另一个文件系统重新创建硬链接结构。我粘贴的 ls -li 是两个不同文件系统中的同一文件,以显示源具有硬链接而目标已丢失它们。
$ ls -li */bin/dnsdomainname
10419 -rwxr-xr-x 4 root root 12992 2010-01-19 10:40 KNOPPIX_V6.2.1CD-2010-01-31-EN.cloop/bin/dnsdomainname
10641687 -rwxr-xr-x 1 root root 12992 2010-01-19 10:40 KNOPPIX_V6.2.1CD-2010-01-31-EN.tree/bin/dnsdomainname
Run Code Online (Sandbox Code Playgroud)
这显然是可能的——如果 rsync 能够保留不同主机之间的硬链接,那么它应该能够在同一主机上的文件干之间执行此操作。
由于某种奇怪的原因,使用我知道应该完成这项工作的三种方法都不起作用,我很困惑出了什么问题。我花了几乎一个工作日来创建脚本、测试它,这似乎是阻止它完全工作的最后一部分。
方法有:
sudo nice tar -C $(NAME).cloop -cf - . | sudo nice tar -C $(NAME).tree -xvpf -
sudo cp -av --preserve=all $(NAME).cloop $(NAME).tree
sudo rsync -x -a -H --progress --delete $(NAME).cloop/ $(NAME).tree
Run Code Online (Sandbox Code Playgroud)
我有一个集成的测试套件(make changes),其中一部分正在计算两个文件系统的 md5sum,并且 diff 为空 - 这意味着文件系统之间每个文件的内容完全相同。但是,权限和硬链接号之间的差异表明,引用共享(硬链接)inode 的每个文件现在都是一个单独的inode,这不是我想要的。所有三种方法都做同样的事情错误,这真的很可疑,我已经没有想法了。
为了供您查看,这里有完整的 …
我在安装最新版本的 R 时遇到问题,出现了我不明白的错误“致命错误:jni.h:没有这样的文件或目录”。这是我在安装 R 时出现错误之前所做的操作:
#download tar.gz file
https://cran.r-project.org/
#install because we need it for execution of "make"
sudo apt-get install libx11-dev
sudo apt-get install xorg-dev
sudo apt-get install libcurl4-openssl-dev
# decompile
# on terminal
./configure
make
Run Code Online (Sandbox Code Playgroud)
安装库后,在安装结束时我看到的是这样的(无法粘贴所有内容,因为它太长了):
installing to /home/fafnyr/R/R-3.5.2/library/mgcv/libs
** R
** data
** inst
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (mgcv)
make[2]: Leaving directory '/home/fafnyr/R/R-3.5.2/src/library/Recommended' …Run Code Online (Sandbox Code Playgroud) 我有一个 Makefile,其中包含一个sshfs命令,后跟一个cd命令:
mr: # mount-remote
sshfs -p 5022 -o nonempty myname@myssh.serveur.fr:mnt /home/julien/myworking_path
cd ./working_directory_mwe1/wk_subd_mwe2/
Run Code Online (Sandbox Code Playgroud)
第一个命令 sshfs 就像一个魅力一样,可以正确安装两个端点。但是,cd 命令不会更改目录。然后我必须手动重新输入。如果我手动输入,它就可以工作,但我希望在输入命令时完成mr。
我尝试了以下操作,但记住这可能是因为我在执行时连接了终端 2 秒,sshfs但这也不起作用。我尝试cd每秒重新运行一次,直到它起作用。
mr: # mount-remote
sshfs -p 5022 -o nonempty myname@myssh.serveur.fr:mnt /home/julien/myworking_path
until cd ./working_directory_mwe1/wk_subd_mwe2/ ; do sleep 1 ; done
Run Code Online (Sandbox Code Playgroud)
感谢您的热心帮助 :)
编辑:我忘记指定我尝试的最小工作目录cd正是端点处的目录,实际上,我意识到我的目标是:
mr: # mount-remote
sshfs -p 5022 -o nonempty myname@myssh.serveur.fr:mnt /home/julien/myworking_path
cd /home/julien/myworking_path/some_sub_dir1/som_sub_dir2
Run Code Online (Sandbox Code Playgroud) 我一直在玩弄 makefile 和 bash 脚本,我对此很感兴趣:
是否可以从 diff(或类似的东西)中获取一个布尔值,以便我可以在 bash 脚本中使用它来评估 if 语句(这样用户就不会看到实际的 diff 执行)?
这个问题应该从标题中清楚,但这里是。
哪个更好,或者,有没有更好的选择:
thing:
rm -f a.file b.file
doTheMake
thing:
-rm a.file b.file
doTheMake
Run Code Online (Sandbox Code Playgroud)
我想总是删除 a.file和b.file之前doTheMake运行。
我正在bash-3.2通过 cygwin使用shell 尝试在我的系统上安装elinks浏览器。我正在按照此文档进行安装。
我正在执行以下命令:
./configure && make && make install
Run Code Online (Sandbox Code Playgroud)
设置失败说:
error: C preprocessor "/lib/cpp" fails sanity check
Run Code Online (Sandbox Code Playgroud)
我该怎么办?