.PHONY
Makefile 中的含义是什么?我已经完成了这个,但它太复杂了.
有人可以用简单的语言向我解释一下吗?
任何人都可以清楚地解释变量赋值在Makefile中是如何工作的.
有什么区别:
VARIABLE = value
VARIABLE ?= value
VARIABLE := value
VARIABLE += value
Run Code Online (Sandbox Code Playgroud)
我已经阅读了GNU Make手册中的部分,但它对我来说仍然没有意义.
我可以将变量作为命令行参数传递给GNU Makefile吗?换句话说,我想传递一些最终会成为Makefile变量的参数.
这是我的makefile:
all:ll
ll:ll.c
gcc -c -Wall -Werror -02 c.c ll.c -o ll $@ $<
clean :
\rm -fr ll
Run Code Online (Sandbox Code Playgroud)
当我尝试make clean
或make make
,我得到这个错误:
:makefile:4: *** missing separator. Stop.
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
在跑步的时候
./configure --prefix=/mingw
Run Code Online (Sandbox Code Playgroud)
在我以前运行的库的MinGW/MSYS系统上
'./configure --prefix=/mingw && make && make install'
Run Code Online (Sandbox Code Playgroud)
我发现了这条消息:
警告:已安装Vamp插件SDK的一个版本.如果您安装新版本而不先删除旧版本,则会出现忧虑和悲伤.(继续)
这让我很担心.与'make install'相反的是什么,即如何在Linux中卸载库?"干净"会做这项工作,还是涉及其他步骤?
CC=g++
CFLAGS=-c -Wall
LDFLAGS=
SOURCES=main.cpp hello.cpp factorial.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=hello
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
.cpp.o:
$(CC) $(CFLAGS) $< -o $@
Run Code Online (Sandbox Code Playgroud)
什么做的$@
和$<
准确呢?
从命令行中,您如何判断运行Mac OS X时机器上有多少个核心?在Linux上,我使用:
x=$(awk '/^processor/ {++n} END {print n+1}' /proc/cpuinfo)
Run Code Online (Sandbox Code Playgroud)
它并不完美,但它很接近.这是为了获取make
,这就是为什么它给出比实际数字高1的结果.我知道上面的代码可以用Perl编写,也可以用grep,wc和cut编写,但我认为上面的内容在简洁性和可读性之间是一个很好的权衡.
非常晚编辑:只是为了澄清:我问有多少逻辑核可用,因为这与我想要make
产生多少个同时工作相对应.jkp的答案,由Chris Lloyd进一步完善,正是我所需要的.因人而异.
我正在尝试使用GCC(linux)和makefile来编译我的项目.
我得到以下错误,在这种情况下似乎无法破译:
"No rule to make target 'vertex.cpp', needed by 'vertex.o'. Stop."
Run Code Online (Sandbox Code Playgroud)
这是makefile:
a.out: vertex.o edge.o elist.o main.o vlist.o enode.o vnode.o
g++ vertex.o edge.o elist.o main.o vlist.o enode.o vnode.o
main.o: main.cpp main.h
g++ -c main.cpp
vertex.o: vertex.cpp vertex.h
g++ -c vertex.cpp
edge.o: edge.cpp edge.h
g++ -c num.cpp
vlist.o: vlist.cpp vlist.h
g++ -c vlist.cpp
elist.o: elist.cpp elist.h
g++ -c elist.cpp
vnode.o: vnode.cpp vnode.h
g++ -c vnode.cpp
enode.o: enode.cpp enode.h
g++ -c node.cpp
Run Code Online (Sandbox Code Playgroud) 我使用Makefiles.
我有一个目标run
,它运行构建目标.简化后,它看起来如下:
prog: ....
...
run: prog
./prog
Run Code Online (Sandbox Code Playgroud)
坐下来.我知道这是巧妙的,但不需要起立鼓掌.
现在,我的问题是 - 有没有办法传递参数?以便
make run asdf --> ./prog asdf
make run the dog kicked the cat --> ./prog the dog kicked the cat
Run Code Online (Sandbox Code Playgroud)
谢谢!
例如,我的makefile中有类似的东西:
all:
cd some_directory
Run Code Online (Sandbox Code Playgroud)
但是当我输入时,我make
只看到'cd some_directory',就像在echo
命令中一样.