我想运行'make install'所以我拥有我需要的一切,但是我想把它安装在自己的文件夹中而不是系统的/ usr/bin等可能吗?即使它引用了/ usr/bin等中的工具?
在Makefile中,deploy配方需要设置一个环境变量ENV来正确执行自身,而其他人则不关心,例如:
ENV =
.PHONY: deploy hello
deploy:
rsync . $(ENV).example.com:/var/www/myapp/
hello:
echo "I don't care about ENV, just saying hello!"
Run Code Online (Sandbox Code Playgroud)
如何确保设置此变量,例如:是否有办法将此makefile变量声明为部署配方的先决条件,例如:
deploy: make-sure-ENV-variable-is-set
Run Code Online (Sandbox Code Playgroud)
?
谢谢.
该命令$ make all会产生错误,rm: cannot remove '.lambda': No such file or directory因此它会停止.我希望它忽略rm-not-found-errors.我怎么强迫?
Makefile文件
all:
make clean
make .lambda
make .lambda_t
make .activity
make .activity_t_lambda
clean:
rm .lambda .lambda_t .activity .activity_t_lambda
.lambda:
awk '{printf "%.4f \n", log(2)/log(2.71828183)/$$1}' t_year > .lambda
.lambda_t:
paste .lambda t_year > .lambda_t
.activity:
awk '{printf "%.4f \n", $$1*2.71828183^(-$$1*$$2)}' .lambda_t > .activity
.activity_t_lambda:
paste .activity t_year .lambda | sed -e 's@\t@\t\&\t@g' -e 's@$$@\t\\\\@g' | tee > .activity_t_lambda > ../RESULTS/currentActivity.tex
Run Code Online (Sandbox Code Playgroud) 我有一个目录结构如下的项目:
$projectroot
|
+---------------+----------------+
| | |
part1/ part2/ part3/
| | |
+------+-----+ +---+----+ +---+-----+
| | | | | | |
data/ src/ inc/ src/ inc/ src/ inc/
Run Code Online (Sandbox Code Playgroud)
我应该如何编写部分/ src(或其他任何地方)的makefile,它可以补充/链接部分?/ src中的c/c ++源文件?
我可以做一些像-I $ projectroot/part1/src -I $ projectroot/part1/inc -I $ projectroot/part2/src ...
如果这样可行,是否有更简单的方法.我看过每个相应部分都有makefile的项目?文件夹.[在这篇文章中我使用了像bash语法中的问号]
我有三个文件:program.c,program.h和headers.h.
program.c包括program.h和headers.h.
我需要使用gcc编译器在Linux上编译它.我不知道该怎么做.Netbeans为我创建了一个,但它是空的.
我想了解'gmake'和'make'之间的区别?
在我的linux盒子上,它们完全相同:
% gmake --version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
% make --version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Run Code Online (Sandbox Code Playgroud)
我猜这在所有平台上都不一样?是否有充分的理由使用其中一个?
为什么有这两个名字有一些历史意义吗?
我编写了一个程序,用于将其输出打印到stdout的赋值.赋值规范要求创建一个Makefile,在调用make run > outputFile时应运行程序并将输出写入文件,该文件的SHA1指纹与规范中给出的指纹相同.
我的问题是我的makefile:
...
run:
java myprogram
Run Code Online (Sandbox Code Playgroud)
还会将运行我的程序的命令(例如java myprogram)输出到输出文件,这样我的文件就会包含这个额外的行,导致指纹错误.
有没有办法在没有命令调用回显到命令行的情况下执行命令?
在我的干净部分,我Makefile试图在永久删除之前检查文件是否存在.我使用此代码但收到错误.
它出什么问题了?
if [ -a myApp ]
then
rm myApp
fi
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息
if [ -a myApp ]
/bin/sh: Syntax error: end of file unexpected (expecting "then")
make: *** [clean] Error 2
Run Code Online (Sandbox Code Playgroud) 我的项目目录如下所示:
/project
Makefile
main
/src
main.cpp
foo.cpp
foo.h
bar.cpp
bar.h
/obj
main.o
foo.o
bar.o
Run Code Online (Sandbox Code Playgroud)
我想让makefile做的就是将.cpp文件/src夹中的所有文件编译到.o文件/obj夹中的文件中,然后将所有.o文件链接/obj到顶级文件夹中的输出二进制文件中/project.
我几乎没有Makefiles的经验,我不确定要搜索什么来实现这一目标.
另外,这是一种"好"的方式,或者是否有更标准的方法来实现我的目标?
每次从源代码编译时,都会经历相同的3个步骤:
$ ./configure
$ make
$ make install
Run Code Online (Sandbox Code Playgroud)
我理解,将安装过程划分为不同的步骤是有道理的,但我不明白,为什么这个星球上的每个编码器必须一次又一次地编写相同的三个命令才能完成一个单独的工作.从我的角度来看./install.sh,使用包含以下文本的源代码自动交付脚本是完全合理的:
#!/bin/sh
./configure
make
make install
Run Code Online (Sandbox Code Playgroud)
人们为什么要分开做3个步骤?