linux+make
摘要:程序员都知道,Linux 不是 Unix,不过二者之间确实存在关系,即 Linux 系统是从 Unix 派生出来的,而 Linux 是一个类 Unix 的操作系统。那么,二者之间具体存在哪些明显的差异呢?
原文链接:https://akr.am/blog/posts/unix-is-not-linux
声明:本文为 CSDN 翻译,未经授权,禁止转载。
作者 | Mohamed Akram译者 | 弯月出品 | CSDN(ID:CSDNnews)网上很多有关POSIX和Unix工具的教程和指南总是假设你安装了Linux,或者更具体地说,安装了基于GNU的操作系统。然而,在探讨shell的行为、工具程序以及C的标准库时,这种假设往往会产生很大的影响。
虽然Linux的主导地位可能会让我们忽略Linux与这些操作系统的不同,但我们还是应该有一定的了解。在本文中,我将列出一些比较明显的差异。
所有Unix系统上的默认shell都是sh,而不是bash。POSIX标准中介绍了sh中使用的语言。然而,在许多Linux系统上,sh只是指向bash的链接,这样可以用更接近标准的方式来使用bash,但人们依然可以使用一些无法在其他系统上使用的bash功能。如有疑问,请参阅标准。
Unix不包含长选项Unix命令的选项有两种写法:短选项(只有一条短线-)与长选项(有两条短线--)。短选项一般会采用缩写的形式,而长选项一般会写出完整的单词。
许多工具程序都接受长选项,例如grep --count,对应的短选项是grep -c。前者是GNU的写法,其他系统通常不会采用这种写法,例如BSD。事实上,标准的getopts工具程序和相应的getopt C函数只支持短选项。
Make不同于GNU makePOSIX版本的make比GNU版本更有局限性。这个问题很难解决,因为规范的许多方面都有所欠缺,特别是逻辑或条件运算符。为了解决这个问题,你可以将一些逻辑移动到configure脚本,由这个脚本生成另一个Makefile,然后再包含到主文件中。此外,BSD的语法与GNU完全不同,例如条件语句。幸运的是,如果你只关注macOS和Linux,则可以放心地使用GNU的特性,因为macOS都是基于GNU的。
C编译器不同于GCC在Makefiles文件中引用C编译器时,最好使用变量$(CC),在编译C++代码时,最好使用变量$(CXX)。大多数BSD系统的默认编译器如今都改为使用Clang了,而且不提供gcc可执行文件。如果是在Makefiles以外使用C和C++编译器,则可以直接使用cc和c++命令,这两个命令能在所有系统上工作。
GNU不同于Linux二者略有不同,GNU接口不一定会出现在Linux系统上。例如,Alpine Linux发行版因其轻量级而流行于Docker容器中,它没有使用musl的GNU C库,而且放弃了GNU工具程序,改为使用BusyBox。因此,最好还是使用可移植的接口,即便你的目标只是Linux系统。
Unix不同于UNIX最后,请注意,Unix与UNIX也不完全相同。后者是需要The Open Group认证的商标。在众多经过认证的操作系统中,最有名的是macOS,它遵循一切UNIX规范。也就是说,包括BSD在内的大多数类Unix系统以及GNU工具都在努力尽量遵守标准。
","force_purephv":"0","gnid":"938a96b0bedf62e68","img_data":[{"flag":2,"img":[{"desc":"","height":"80","s_url":"https://p0.ssl.img.360kuai.com/t0186957a1ca5352752_1.gif","title":"","url":"https://p0.ssl.img.360kuai.com/t0186957a1ca5352752.gif","width":"640"},{"desc":"","height":"607","title":"","url":"https://p0.ssl.img.360kuai.com/t01d614e58f1dc1025f.jpg","width":"1080"}]}],"original":0,"pat":"art_src_1,fts0,sts0","powerby":"hbase","pub_time":1661947874000,"pure":"","rawurl":"http://zm.news.so.com/cfbf1d8491a4fb7eb0359c8100cb0878","redirect":0,"rptid":"bf7145ae1614b6ae","s":"t","src":"CSDN","tag":[{"clk":"ktechnology_1:操作系统","k":"操作系统","u":""},{"clk":"ktechnology_1:mac","k":"mac","u":""},{"clk":"ktechnology_1:linux","k":"linux","u":""}],"title":"再强调一遍:Unix 不是 Linux!
周砖蒲4405在linux环境下编程要求使用make
窦之淑15113549942 ______ CC = gcc OBJS = 姓名.o 姓名2.o TARGET = 姓名 .phony: all clean all: $(OBJS) $(TARGET) 姓名.o : 姓名.c 姓名.h $(CC) -c $< -o $@ 姓名2.o : 姓名2.c 姓名.h $(CC) -c $< -o $@ $(TARGET) : $(OBJS) $(CC) $? -o $@ clean: rm *.o 姓名 编译生成 make 清除 make clean
周砖蒲4405linux中的make命令怎么用,比方说想编译一个文件add.cu,怎么写?是make add.cu 吗? -
窦之淑15113549942 ______ 需要编写Makefile 可以参照gcc的Makefile编写一个 cu格式是cuda的程序么? 那调用的编译器应该有所区别 Makefile里需要指定编译器 CC:=gcc gcc改成你用的编译器
周砖蒲4405关于linux中Make工程管理器的使用 -
窦之淑15113549942 ______ cd 路径 切换到你放源码的目录 ls有“Desktop”,说明你没有进入源码目录,和切换用户无关 make是个命令,它会自动读取当前目录下的Makefile文件,根据文件内容做出处理 有些发行版没有预装make工具,你可以试着输入make,如果提示找不到make命令就是没装 “应用--系统设置--增加/删除程序”这个只能说明你用的是gnome的桌面环境,如果要装make工具最好说明你的发行版,否则就从make源码编译
周砖蒲4405linux的make命令是一个编译器么?它课可以编译什么语言?
窦之淑15113549942 ______ make不是编译器,它可以根据预定义的参数来执行订制的编译过程,在这个过程中是要依靠外部编译器的,比如linux中的gcc集
周砖蒲4405make是linux的自带的还是需要安装编译器才有make功能 -
窦之淑15113549942 ______ make程序不是Linux系统自带的,也不是编译器带的,不要按照IDE的概念去理解(Windows下面的IDE一安装什么工具都有了),make工具是需要另外安装的.比如说我的Linux系统上,当时搭建开发环境时是这样安装的:(我的系统是Fedora,所以用的yum) yum install make gcc gcc-c++ 看,编译器和make是分开安装的哈.make工具是需要makefile的时候才用,而makefile是多个源文件的时候才有,如果你编译一个helloworld程序,直接用gcc或g++编译就可以了,从这点来看,也没理由把make和编译器捆绑在一起.
周砖蒲4405linux下如何用make生成可执行文件x
窦之淑15113549942 ______ 先运行configure脚本生成Makefile编译配置文件 然后执行make命令,make会自动读取上一步生成的Makefile编译链接源代码 最后执行make install命令,make还是去读取Makefile,提取里面的install参数的定义,复制编译链接好的二进制文件到Makefile定义的位置并更改必须的权限.
周砖蒲4405linux 中gcc怎么用,make 怎么用???? -
窦之淑15113549942 ______ 1)gcc xxx.c 自动会默认生成一个 a.out可执行文件; 2) ./a.out =>执行可执行文件; 3)man gcc =>所有使用方法都出来了;----------------------------------------------4)make 使用必须要当前目录Makefile文件,不然make没用;make 其实就是调用当前目录下的Makefile(有些系统不一定是这个文件名字),执行Makefile文件中的脚本程序;----------------------------------------------5)其实这些问题都是小儿科:百度一下什么都出来了!不行google!
周砖蒲4405linux下用make安装软件包 -
窦之淑15113549942 ______ congfigure、make、make install三个步骤每一个都不能出错.第一步是检察系统中软件依赖关系是否满足,并且生成Makefile.第二步是编译软件 第三步是安装 如果那一个部分出错了,就仔细看屏幕提示,一般都会有详细出错信息的,问问题最好将出错信息提供出来,才会最快最准确的获得答案.
周砖蒲4405关于linux中make的使用问题 -
窦之淑15113549942 ______ 注意:hello: hello.c #":"后加个空格 gcc hello.c -o hello #gcc前面是tab而不是空格,你那有可能这里写成空格了
周砖蒲4405linux中make后在相应文件夹中用终端就可以运行,那要make install 有什么用呀? -
窦之淑15113549942 ______ make后可执行的文件已经生成,在编译的目录下找到生成的可执行文件,运行./filename 就可以运行(如果有库文件生成,有可能因找不到库文件无法而运行),但要在其它地方运行就要把这个路径加进去,例如你的文件在/home/user/test目录...