linux下make与make install的区别

经常安装linux下面程序包的时候会下载一个tar.gz的文件,解压缩,然后make还有make install什么的。想知道这对应windows/dos下面C++开发的什么步骤?

刚刚下载的源码包,make能成功,删掉解压的文件夹,重新解压,然后运行make install则报错,是什么原因?

$ make install
python uwsgiconfig.py --build install
using profile: buildconf/install.ini
Traceback (most recent call last):
  File "uwsgiconfig.py", line 1550, in <module>
    uc = uConf(bconf, is_cflags)
  File "uwsgiconfig.py", line 611, in __init__
    self.config.readfp(open_profile(filename))
  File "uwsgiconfig.py", line 589, in open_profile
    return open(filename)
IOError: [Errno 2] No such file or directory: 'buildconf/install.ini'
make: *** [install] Error 1

我看了'buildconf/install.ini'这个文件确实不存在,buildconf路径下面是一堆其他的ini文件。

阅读 16.5k
2 个回答

你有没有 ./configure 很多源码要 autoconf步骤才能执行make,看样子,buildconf/install.ini很有可能是configure生成的。
make执行Makefile文件,Makefile和Visual Studio sln文件 都是规则文件,告诉编译器如何生成可执行文件,有哪些依赖 有哪些步骤。
比如以下的Makefile:

DES Makefile

CC=clang
CXX=clang++
CFLAGS=-Wall
CXXFLAGS= -std=c++11
LDFLAGS=-lm

all:des.cpp Inmessionante.o
$(CXX) $(CXXFLAGS) des.cpp Inmessionante.o -o des -lstdc++

Inmessionante.cpp:
$(CXX) $(CXXFLAGS) -c Inmessionante.cpp

clean:
-rm -rf *.o des

首先make会执行第一个标签(或目标),也就是all.检查依赖,推导,比如Inmessionante.o并不存在,就检查有没有Inmessionante.o的生成步骤。有就执行这个步骤。否则就会失败。
在Windows下也有make,比如Mingw移植过去的,还有Cygwin的make,语法和linux下面的一致,换行符不一样。还有VisualStudio自带的nmake,nmake语法有少许差异。

make执行的主要是编译源文件,而make install 正是执行install标签(或目标),如果没有标签(或目标)的话,是不能安装的。

install:
todo install.

Linux下主要是将二进制复制到 prefix/bin,已经 头文件到 prefix/include等等。
你的Makefile中,自己写好了 install标签(或目标)是可以使用make install,也可以打包make package.

就跨平台而言,可以学习CMAKE,cmake的打包要好的多。
在Windows下编码,如果有IDE,还是IDE简便些。sln文件IDE支持也更好。

make主要是编译,install主要是安装,也就是把文件复制到某些目录。

宣传栏