一、简介
Cygwin 是一个在 Windows 操作系统上提供类似于 Unix/Linux 环境的兼容层的开源项目。它为 Windows 用户提供了一种在 Windows 平台上运行类 Unix 程序的方式。
Cygwin 提供了一组工具和库,包括一个动态链接库(cygwin1.dll)和一个用于安装和管理软件包的包管理器。通过安装 Cygwin,用户可以在 Windows 上使用许多常见的开源软件,如 Bash shell、GCC 编译器、Emacs 文本编辑器等。
Cygwin 通过将 Windows API 转换为类 Unix API 的方式实现了对 Unix/Linux 兼容性的支持。这意味着用户可以在 Cygwin 环境中运行许多原本为 Unix/Linux 设计的程序,而无需进行大量的修改。
Cygwin 提供了一个终端仿真器,可以在其中运行命令行程序。用户可以通过命令行界面使用 Cygwin 提供的工具和命令,也可以编写和运行自己的脚本。
总之,Cygwin 提供了一种在 Windows 上获得类 Unix/Linux 环境的方式,使用户能够在 Windows 平台上使用许多常见的开源工具和软件。
官网:https://www.cygwin.com/
Cygwin的优点:
- 广泛的软件包支持:Cygwin提供了广泛的软件包支持,几乎可以找到大部分常见的开发工具和库。
- 更好的Windows集成性:Cygwin提供了更好的Windows集成性,可以直接访问Windows文件系统和系统资源。
- 更高的兼容性:Cygwin提供了更高的兼容性,可以运行更多的Unix/Linux软件。
Cygwin的缺点: - 安装和配置复杂:Cygwin的安装和配置相对复杂,需要选择和安装大量的软件包。
- 较大的系统开销:Cygwin需要较多的系统资源,并且在运行时可能会有一定的性能开销。
二、安装
- 访问官网下载安装包:https://www.cygwin.com/,下载后双击.exe文件,开始安装
- 选择安装方式
- 选择安装目录
- 选择软件包保存位置
- 选择连接的方式
- 选择下载站点,不同的镜像存放了不同的包,为了获得最快的下载速度,阿里云镜像:http://mirrors.aliyun.com/cygwin/,网易开源镜像:http://mirrors.163.com/cygwin/ 。
- 选择需要下载安装的组件包:binutil、gcc-core、gcc-g++、gdb、make、cmake、mingw63-i686-gcc-core、mingw63-i686-gcc-g++、libgccpp1、procps-ng、tcl、pkg-config
- 点击下一步,等待安装完成
- 安装完成,创建开始菜单
- 运行桌面程序,输入一下命令,验证是否安装成功
cygcheck -c cygwin gcc --version g++ --version gdb --version make --version
三、Cygwin命令
- cygcheck -c 是检查所有安装的软件的版本号
- cygcheck -c cygwin 就是当前Cygwin的版本号。
- gcc --version 查看gcc版本
- gdb -version 查看gdb版本
- g++ --version 查看g++ 版本
- pwd 显示当前的路径
- cygpath -dm “
pwd
” 显示当前的完整路径(即windows格式的路径) - cd 改变当前路径,无参数时进入对应用户的home目录
- ls 列出当前目录下的文件。此命令有N多参数,比如ls -al
- ps 列出当前系统进程
- kill 杀死某个进程
- mkdir 建立目录
- rmdir 删除目录
- rm 删除文件
- mv 文件改名或目录改名
- man 联机帮助
- less 显示文件的最末几行
- ls 以默认方式显示当前目录文件列表
- ls –a 显示所有文件包括隐藏文件
- ls –l 显示文件属性,包括大小,日期,符号连接,是否可读写及是否可执行
- ls –color=never *.so > obj 不显示文字颜色,将所有so文件记录到obj文件中
- cd dir 切换到当前目录下的dir目录
- cd … 切换到到上一级目录
- cd …/… 切换到上二级目录
- cd ~ 切换到用户目录,比如是root用户,则切换到/root下
- rm file 删除某一个文件
- rm -fr dir 删除当前目录下叫dir的整个目录
- cp source target 将文件source 复制为 target
- cp /root/source . 将/root下的文件source复制到当前目录
- cp –av soure_dir target_dir 将整个目录复制,两目录完全一样
- cp –fr source_dir target_dir 将整个目录复制,并且是以非链接方式复制,当source目录带有符号链接时,两个目录不相同
- kill 杀死某个进程
- mkdir 建立目录
- rmdir 删除目录
四、Cygwin之find命令说明
- find命令形式:find pathname -options [-print -exec -ok …]
'''find命令的参数''' pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。 -print:find命令将匹配的文件输出到标准输出。 -exec:find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } ";,注意{ }和";之间的空格。 -ok:和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。 '''find命令选项''' -name:按照文件名查找文件。 -perm:按照文件权限来查找文件。 -prune:使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。 -user:按照文件属主来查找文件。 -group:按照文件所属的组来查找文件。 -mtime -n +n:按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。 -nogroup:查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。 -nouser:查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。 -newer file1 ! file2:查找更改时间比文件file1新但比文件file2旧的文件。 -size n:[c]:查找文件长度为n块的文件,带有c时表示文件长度以字节计。 -depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。 -fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。 -mount:在查找文件时不跨越文件系统mount点。 -follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。 -cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。 -amin n:查找系统中最后N分钟访问的文件 -atime n:查找系统中最后n*24小时访问的文件 -cmin n:查找系统中最后N分钟被改变文件状态的文件 -ctime n:查找系统中最后n*24小时被改变文件状态的文件 -mmin n:查找系统中最后N分钟被改变文件数据的文件
五、gcc命令
gcc 是 GNU Compiler Collection(GNU 编译器集合)的缩写,是一个常用的开源编译器。它支持多种编程语言,包括 C、C++、Objective-C、Fortran、Ada 等。gcc 命令用于将源代码文件编译成可执行文件或目标文件。它可以处理多个源文件,并根据文件的扩展名自动选择适当的编译器进行编译,版本不同命令可能有所区别,可查看官网:
1.编译选项
- -c:只编译源文件,生成目标文件而不进行链接。
- -o :指定输出文件名。
- -I
:添加头文件搜索路径。 - -D:定义宏。
- -S:生成汇编代码文件
- -Wall:显示所有警告信息。
- -Werror:将警告视为错误。
- -std=:指定所使用的 C 或 C++ 标准。
gcc file.c // 编译 C 源文件为可执行文件,默认输出为 a.out gcc file.c -o output // 指定输出文件名为 output gcc file.cpp // 编译 C++ 源文件为可执行文件,默认输出为 a.out gcc -c file.c // 编译源文件为目标文件,不进行链接 gcc -S file.c // 生成汇编代码文件 gcc file1.o file2.o // 将目标文件链接为可执行文件,默认输出为 a.out gcc file1.o file2.o -o output // 指定输出文件名为 output
- 预处理选项
- -E:只进行预处理,生成预处理后的源代码。
- -D:定义宏。
- -I
:添加头文件搜索路径。 gcc -E file.c // 只进行预处理,生成预处理后的源文件
- 链接选项
- -l:链接使用的库。
- -L
:添加库文件搜索路径。 - -static:静态链接所有库。
gcc -l library // 链接指定的库文件 gcc -L path // 指定库文件搜索路径
- 调试选项
- -g:生成调试信息。
- -O0:禁用优化。
- -ggdb:生成 GDB 调试信息。
gcc -g file.c // 生成可供调试的可执行文件
- 优化选项
- -O1, -O2, -O3:不同级别的优化。
- -Os:针对代码大小进行优化。
- -Ofast:启用所有的优化选项,包括非标准的优化。
gcc -O2 file.c // 使用优化级别 2 进行编译
- 其他选项
- -Wl,:将 传递给链接器。
- -M:生成目标文件和依赖关系的规则。
- -pthread:链接 POSIX 线程库。
gcc -Wall // 开启所有警告信息 gcc -std=c99 // 指定 C 语言标准为 C99 gcc -std=c++11 // 指定 C++ 语言标准为 C++11