18 Star 39 Fork 1

mathmhb / Makefile

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
LGPL-2.1

Makefile

介绍

universal makefile: unifying building and misc operations with the same Makefile.mhb

这是一个“万能”Makefile项目,通过这个工具,可以不用为你的项目或下载的代码单独编写Makefile或CMakeLists.txt等,从而极大便利于你的项目开发。

通过这个工具,可以快速搭建一个简单、易用、通用、可扩展的“万能”开发环境。通过搭配各种常见编程语言的工具链,可作为各种编程语言的统一集成环境。

对于64位Windows用户,可以直接通过下面的链接下载预配置好的统一编程开发环境X以及配套的MinGW64工具链、OpenCV库、PCL库和MTeX套装。

统一编程开发环境X MinGW64:X配套C/C++工具链(64位) MinGW64-OpenCV:X配套OpenCV库V4.7(64位) MinGW64-PCL:X配套PCL库V1.13(64位) MTeX:X配套TeX/LaTeX科技排版系统

选我任意课程(线性系统全英文矩阵代数控制与博弈兵棋与博弈:游戏中的智慧机器视觉与OpenCV实战3D视觉与PCL实战)或参与大创的同学请直接下载。 将下载的每一个自解压包都解压到d:\,可以运行x\sc1updcfg.bat将Sc1目录的配置文件更新为本仓库中的最新版本。 建议创建x\MyIDE.bat的桌面快捷方式,以快速打开编程环境。 运行x\MyCmd.bat可打开cmd窗口,可以运行命令行工具。 运行x\MyShell.bat可打开busybox提供的shell窗口,可以练习Linux命令(如vi编辑器)。 以上批处理文件自动添加相关可执行文件的目录到PATH环境变量,因此不必手工修改系统环境变量。

软件架构

软件架构说明

安装教程

  1. 克隆仓库

cd ~

git clone https://gitee.com/imbit_mathmhb/Makefile

  1. 设置账号

git config --global credential.helper "store"

git config --global user.email "you@example.com"

git config --global user.name "Your Name"

git config --global user.password "Your Password"

使用说明

  1. 在命令行使用万能Makefile智能编译:(Msys2或TDM-GCC下用mingw32-make替换make命令)

cd ~/your/prog

make -f ~/Makefile/Makefile.mhb

如果是用Linux或者 Msys2, 建议给mhb文件加上可执行权限:

chmod a+x ~/Makefile/Makefile.mhb

这样,以后可以编译(或调用其中工具)可不用加make -f或mingw32-make -f,直接用

~/Makefile/Makefile.mhb

  1. 命令行的额外选项:可以用DEBUG指定生成调试符号,X指定交叉编译工具链,C指定编译选项,L指定连接选项

make -f ~/Makefile/Makefile.mhb DEBUG=1 X=arm-linux- C="-Imy/include" L="-Lmy/lib -lmy"

  1. 命令行清理所有生成的文件(clean)或中间临时文件(clean_tmp)

make -f ~/Makefile/Makefile.mhb clean

make -f ~/Makefile/Makefile.mhb clean_tmp

  1. 命令行查找未定义符号对应的库:运行后在命令行粘贴undefined symbol的字符串

make -f ~/Makefile/Makefile.mhb _deps

万能集成环境Sc1IDE或SciTE中使用万能Makefile

万能集成环境Sc1IDE是MTeX套装自带的编辑器,由作者和qihs共同基于SciTE增加了很多功能和配置。

SciTE 是跨平台的最优秀的代码编辑器,小巧而强大,可深度定制。

Makefile.mhb+SciTE搭配,可支持各种语言的编程开发和各种代码文档的编写,形成非常通用的编程开发平台。

方法1:将*.properties文件和Makefile.mhb,Makefile.mhb.inc*等文件放到Sc1IDE/SciTE目录中,并通过Options编辑全局配置文件,在最后一行加入 import zzz_mhb

方法2:将*.properties文件和Makefile.mhb,Makefile.mhb.inc*等文件放到当前用户的家目录中,并通过Options编辑SciTE用户配置文件,加入 import zzz_mhb

方法3:只在当前用户的家目录中创建zzz_mhb.properties文件的超链接,并通过Options编辑SciTE用户配置文件,加入以下代码:

MHB_CFG=1
MHB_DIR=/home/xxx/Makefile (注意改成自己放*Makefile.mhb*的目录)
import zzz_mhb

经过以上配置,Tools菜单有以下功能:

Compile:快速编译单文件的源程序(一般情况下建议用Build菜单)

Build:根据当前文件夹的源程序,自动构建应用或者从tex生成pdf、从md生成html等(建议经常使用)

注意:以前版本该菜单仅仅完成构建功能,最新版本为方便C/C++程序的编译及运行,本菜单将自动在成功构建exe文件后运行程序(激活这一功能需要在命令行指定FILE),可以省略点击Run菜单了。

Go:运行当前文件对应的可执行文件,或者查看生成的pdf、html等文档

Clean:清理构建过程中生成的各种临时文件或生成的pdf文件

Debug with GDB:打开GDB工具进行调试

Run:自动运行当前文件对应的可执行文件(并显示运行时间),或者查看生成的pdf、html等文档

Profiling:对当前文件对应的可执行文件用gprof工具进行运行时间分析,为优化程序提供参考

Lint:检查源程序的语法问题(通过设置lint.xxx理论上可以对各种语言的源文件进行语法检查)

Generate tags and api: 通过ctags扫描当前目录中的源程序生成tags文件,并产生用于SciTE自动补全功能的api文件

Build and Run Remotely:在服务器上自动构建、运行当前文件对应的可执行文件

注意:这是增加的新功能(类似VSCode中Remote SSH),在WinScp中直接用SciTE编辑远程服务器上的文件,通过该菜单即可直接在远程服务器上进行程序编译及运行

Command/Shell Prompt:打开命令窗口(Windows)或xterm终端(Linux)

Explorer/FileManager:打开资源管理器(Windows)或pcmanfm文件管理器(Linux)

Search Enginee:打开网页浏览器搜索所选文本(这是查找各种函数用法或语言帮助的快速途径)

Format with Astyle:用astyle工具格式化当前源程序(这是美化程序最快捷的方法)

Spell with Aspell:用aspell工具对当前文件进行拼写检查(这是拼写检查最快捷的方法)

Git _update:对当前git仓库进行远程更新,使文件夹与服务器最新版保持一致(为避免不必要的代码冲突,建议每次改仓库中的代码前务必先更新!)

Git _commit:将当前文件的修改提交到git仓库的服务器(为提交成功,请务必先用前面的命令或者Git _config菜单配置好git用户信息及密码!)

Git _config:建议先从Options菜单打开用户配置文件,按以下方式填上git用户信息及密码,存盘后可用本菜单运行git相关命令自动完成配置(不需要手工敲前面第2节设置账号的命令了)

git.user.name=xxx
git.user.password=yourpass
git.user.email=x@y.z
git.user.option=--global

以上各种命令需要调用编译器、grep、sed、gdb、ctags、astyle、git等工具,如果提示找不到相关命令,需要自行安装相关工具,并设置系统环境变量PATH。

Linux下以上工具很多发行版已自带,ArchLinux下可通过pacman命令安装缺少的各种工具。

Windows下使用本万能Makefile,建议下载busybox.exe,与Makefile.mhb放在同一目录,这样可以通过busybox提供grep、sed,与TinyC Compiler配合即可搭建出最小的C语言集成环境。

如果在Windows下进行C++的开发,建议安装 Msys2,并通过pacman命令安装gcc编译器以及所需的各种工具,这样可以构建与Linux系统几乎一致的完美开发环境。

vim使用万能Makefile

vim号称编辑器之神,历经几十年而不落,虽然入门看似不易,但逐渐用熟后会让人叹为观止、难以割舍。

vim是控制台界面下最好的编辑器,图形界面下有gvim。VSCode等新型巨无霸开发环境也有vim插件。

本项目也为SciTE提供了lua语言编写的vim模式,喜欢vi(m)操作方式的用户可修改StartUp.lua来调入相关脚本(支持vim模式或emacs模式)。

本项目针对vim,提供了我个人的vim配置文件mhb.vim,运行如下命令即可在用户HOME目录生成.vimrc,使vim启动时自动调入mhb.vim:

echo source ~/Makefile/mhb.vim > ~/.vimrc

这个vim配置文件的主体是基于Makefile.mhb做的热键绑定,其他配置能简则简,尽可能少用插件,遵从KISS原则和“奥卡姆剃刀”思想。

热键绑定原则:提供两组按键,一组为\\+字母(取首字母或单词中不造成冲突的字母),一组为函数功能键(与SciTE中设置的快捷键基本保持一致),不常用的功能不设函数功能键。

配置文件中增加了 F2 键查询按键定义, Ctrl+A 全选, Ctrl+S 存盘, Ctrl+Q 退出当前文件

** Ctrl+- 切换到上一文件, Ctrl+= 切换到下一文件, Ctrl+9 切换到上一Tab窗口, Ctrl+0 切换到下一Tab窗口**

** \\ 或 F7 键编译并运行程序,+Enter 打开错误信息(Quickfix)窗口, Ctrl+[ 切换到上一错误信息, Ctrl+] 切换到下一错误信息**

Build & Run:\b。根据当前文件夹的源程序,自动构建并运行应用或者从tex生成pdf、从md生成html等(建议经常使用)

注意:以前版本仅仅完成构建,最新版本为方便C/C++程序的编译及运行,将自动在成功构建可执行文件后运行程序

Go:\g 或 F5。运行当前文件对应的可执行文件,或者查看生成的pdf、html等文档

Clean:\c 或 Shift-F7。清理构建过程中生成的各种临时文件或生成的pdf文件

Debug with GDB:\d 或 Shift-F9。打开GDB工具进行调试

已配置用 \t 激活vim自带的TermDebug,可在vim中无缝进行调试

Run:\r 或 F9。自动运行当前文件对应的可执行文件(并显示运行时间),或者查看生成的pdf、html等文档

Build & Run Remotely:\` 或 Ctrl-F9。在远程服务器上相应目录内自动构建并运行应用

注意:这是增加的新功能(类似VSCode中Remote SSH),在WinScp中直接用vim编辑远程服务器上的文件,通过该热键即可直接在远程服务器上进行程序编译及运行

Profiling:\p 或 Alt-F9。对当前文件对应的可执行文件用gprof工具进行运行时间分析,为优化程序提供参考

Lint:\l 或 Alt-F8。检查源程序的语法问题(通过设置lint.xxx理论上可以对各种语言的源文件进行语法检查)

Generate tags: \T。通过ctags扫描当前目录中的源程序生成tags文件,方便在程序中进行函数或符号的跳转(Ctrl+])或跳回(Ctrl+T)

Command/Shell Prompt:F8 。打开vim内置的终端窗口,方便运行shell命令

Explorer/FileManager:\e。打开vim内置的netrw文件浏览器,并可选择文件进行编辑

Search Enginee:\? 。打开网页浏览器搜索所选文本(这是查找各种函数用法或语言帮助的快速途径)

Format with Astyle:\f 或 Shift-F8。用astyle工具格式化当前源程序(这是美化程序最快捷的方法)

Spell with Aspell:\s 或 Ctrl-F8。用aspell工具对当前文件进行拼写检查(这是拼写检查最快捷的方法)

Git _update:\u 或 F10。对当前git仓库进行远程更新,使文件夹与服务器最新版保持一致(为避免不必要的代码冲突,建议每次改仓库中的代码前务必先更新!)

Git _commit:\m 或 Shift-F10。将当前文件的修改提交到git仓库的服务器(为提交成功,请务必先用前面的命令或者下述命令配置好git用户信息及密码!)

Git _config:\i 。命令行里面填上git用户名、邮箱及密码,按回车后可用本菜单运行git相关命令自动完成配置(不需要手工敲前面第2节设置账号的命令了)

Open Alt-File: \- 和 \=。\- 用于快速打开当前文件的相关文件(对C/C++程序打开头文件,对tex文件打开编译后的log文件),\= 用于从相关文件中切换回原文件

在Windows下搭建自己的通用开发环境(基于MSYS2)

利用本项目提供的文件,可以快速搭建自己的通用开发环境(C/C++/Lua/Python/Perl/Java/Markdown/Html/LaTeX/...)。

上我任何课程的同学,请按此说明完成配置。以下假设机器是64位x86架构。注意:请禁用360杀毒等软件。提示:每隔一段时间请运行pacman -Syu命令对系统进行更新。

MSYS2官方说明:MSYS2 comes with different environments and the first thing you have to decide is which one to use. The differences among the environments are mainly environment variables, default compilers/linkers, architecture, system libraries used etc. If you are unsure, go with UCRT64.

更新说明:根据MSYS2官方说明,考虑到Win10的普遍应用,以下配置针对ucrt64环境,也就是MSYS2安装后默认运行的环境。

如果希望用mingw64环境,请将下面所有命令或路径中的ucrt64替换为mingw64mingw-w64-ucrt-替换为mingw-w64-

  1. 下载并保存 Sc1 到空目录(如c:\MyIDE)
  2. 按前述方法配置SciTE,如把本项目所有文件放到SciTE可执行文件的目录中
  3. 从清华源镜像下载并运行 msys2安装包 ,建议安装到c:\msys64
  4. 设置系统环境变量PATH,把 c:\\msys64\\usr\\binc:\\msys64\\ucrt64\\bin 放在PATH路径最前面
  5. 运行ucrt64.exe,用一行脚本配置pacman使用北外源(如用其他源请替换bfsu.edu.cn):sed -i -e "/bfsu.edu.cn/! s/^S/#S/" /etc/pacman.d/mirror*,并更新系统:pacman -Sy
  6. 用一行脚本装需要的GCC工具链和用到的工具或库(不选视觉课程的可去掉opencv、qt6-base):for pkg in ninja make gcc gdb astyle ctags cmake opencv qt6-base; do pacman -S --needed --noconfirm mingw-w64-ucrt-x86_64-$pkg; done 【可自己装其他工具,如运行 pacman -S make git vim 来安装make、git工具和vim“神”编辑器】

选修“3D视觉与PCL实战”课程的同学,请继续在ucrt64终端中按以下步骤配置PCL库。为方便开发,请同时下载安装Cloud Compare。

  1. 用一行脚本装PCL依赖的一些库:for pkg in openmp qhull gtest nlohmann-json vtk pdal openblas64 openvdb; do pacman -S --needed --noconfirm mingw-w64-ucrt-x86_64-$pkg; done
  2. 下载flann源代码并构建、安装:git clone https://gitee.com/haha-web/flann; cd flann; cmake . --fresh -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release --install-prefix /ucrt64; mingw32-make; mingw32-make install; cd ..
  3. 下载PCL源代码并构建、安装:git clone https://gitee.com/yubaoliu/pcl; cd pcl; test -f .XX || sed -i "/cmake_minimum/a project(PCL LANGUAGES CXX C)\nlink_libraries(-llz4 -latomic)\nfind_package(OpenMP)" CMakeLists.txt && touch .XX; cmake . --fresh -G "Ninja" -DCMAKE_BUILD_TYPE=Release --install-prefix /ucrt64; ninja; ninja install; cd ..

编译flann和PCL源代码时间视机器配置可能长达数个小时,为方便快速安装PCL库,我为大家分别提供ucrt64环境和mingw64环境下预先编译好的版本(flann 1.9.1,PCL 1.13),前者解压到msys64/urct64目录即可,后者解压到msys64/mingw64目录即可。注意:没必要同时下载两个版本,根据所用的环境下载对应的版本即可。ucrt64环境依赖微软在Win10/Win11自带的UCRT库(支持UTF8编码),mingw64环境依赖各个Windows都提供的MSVCRT库。

ucrt64环境下编译的PCL库和flann 链接: https://pan.baidu.com/s/1owfymKbqBMp4FjxHLg0Auw 提取码: 5drf

mingw64环境下编译的PCL库和flann 链接: https://pan.baidu.com/s/1B3fhiLhB4alADG3O01kbXw 提取码: p3p1

mingw64环境下编译的PCL库(不含flann) 链接:https://pan.baidu.com/s/1J2kNGKw2_VO8tc7rIQlBiQ 提取码:oxrd

ucrt64环境下编译的PCL库(不含flann) 链接: https://pan.baidu.com/s/1oIZk9WrEM5JS83grKecZnQ 提取码: ijuf

在Linux下搭建自己的通用开发环境

在ArchLinux(或Manjaro等衍生发行版)下搭建通用开发环境,与上面完全类似,只不过上面提到的所有包都不必自己下载,因为Arch Linux的软件仓库提供了所有的包,可一条命令安装:sudo pacman -Sy --needed --noconfirm scite vim git ninja make gcc gdb astyle ctags cmake opencv openmp boost eigen qhull qt6-base gtest nlohmann-json vtk pdal openblas openvdb flann。最后一步安装PCL可直接用Arch Linux的AUR工具来自动下载源代码并构建安装:yaourt -S pcl。如果没有安装过yaourt,可访问 yaourt官网,根据里面的命令来安装。

在Debian、Ubuntu、Alpine、FreeBSD等其他Linux下,没有pacman这样强大的包管理命令,官方软件仓库中的软件数量也远远少于ArchLinux,软件版本也往往老一些。在这些系统上,请用相应的包管理命令查询并安装上面提到的包。对于官方仓库中没有的包,一般需要自己下载或克隆源代码,来编译、构建并安装到系统,没有在ArchLinux上装软件方便。

如果从源代码编译PCL,可用如下命令:git clone https://gitee.com/yubaoliu/pcl; cd pcl; test -f .XX || sed -i "/cmake_minimum/a project(PCL LANGUAGES CXX C)\nlink_libraries(-llz4 -latomic)\nfind_package(OpenMP)" CMakeLists.txt && touch .XX; cmake . --fresh -G "Ninja" -DCMAKE_BUILD_TYPE=Release --install-prefix /usr/local; ninja; sudo ninja install

在Mac OS下搭建自己的通用开发环境

在Mac OS下需要先安装 XQuartzMacPorts,建议使用清华源,然后用sudo port install scite 来安装SciTE。在XQuartz中运行SciTE,按前面说明进行SciTE的配置。

sudo port install opencv4-devel 来安装OpenCV。

sudo port install flann 来安装flann库。

远程编辑与运行服务器端上的程序代码

很多人喜欢用VSCode的一个关键原因是通过Remote-SSH插件能直接编辑服务器上的程序代码并在服务器端运行程序,但大部分人不了解其工作原理(如Electron 框架、Language Server Protocol),也不知道服务器端将为此功能额外消耗至少数百兆字节的硬盘空间并增加一堆扩展进程占用太多cpu、内存、IO资源。当然,能用Remote-SSH的前提还包括有权限在远程机器安装vscode,同时也需要有很好的网络速度。

其实,利用前面配置的通用开发环境SciTE或vim,最简单、最轻量、最高效的方式是WinSCP,在WinSCP中将SciTE或vim设置为默认编辑器,浏览服务器端目录时按F4键直接编辑选中的文件即可。编辑过程中只要存盘,服务器上的文件将自动同步更新。在服务器端运行程序只需要用Shift+Ctrl+T打开控制台终端或用Ctrl+P打开Putty终端,运行程序的命令一般只需键入一次即可。后面再次运行只需要用上箭头键呼出历史命令即可。

更新提示:根据上述原理,本项目最新版本已在SciTE中增加工具“Build and Run Remotely”,能够直接通过SSH在服务器端直接构建运行!!

关于Python开发与包管理

前面配置的通用开发环境SciTE或vim已能进行Python开发,因此原则上不需要再安装任何别的Python开发环境

为避免出现不必要的错误,也为了大大减少电脑资源的占用,我不建议使用Anaconda、Pycharm等巨无霸软件,若已安装这样的软件,建议将其卸载。

由于Windows下Anaconda极其糟糕的设计,卸载Anaconda后会造成运行cmd闪退的严重问题,请以管理员权限打开PowerShell,输入以下命令恢复被破坏的注册表设置: C:\Windows\System32\reg.exe DELETE "HKCU\Software\Microsoft\Command Processor" /v AutoRun /f 可参考 由anaconda卸载引起的command prompt闪退问题

由于MSYS2或ArchLinux的官方软件仓库或用户软件仓库中提供了大量的Python包,所以进行Python开发时如果程序提示缺少某些包,请先用pacman或yaourt来搜索并安装。

注意:只有在官方软件仓库或用户软件仓库中没有所需要的包时,才需要使用Python官网推荐的pip命令安装相应的包。建议用python -m venv venv;. venv/bin/activate创建并激活虚拟环境,在虚拟环境中用pip命令安装仓库中没有的包。

安装pip:ArchLinux下用sudo pacman -S python-pip,MSYS2/ucrt64环境下pacman -S mingw-w64-ucrt-x86_64-python-pip,MSYS2/mingw64环境下pacman -S mingw-w64-x86_64-python-pip

经测试,目前MSYS2中缺乏预编译好的PyTorch深度学习框架(因wheel二进制包不支持MinGW),对此类应用,可下载WinPython这一便携、绿色、强大、相对小巧的Python发行版,解压,并可将winpython可执行文件的目录加到PATH最前面。这样在前面配置的通用开发环境SciTE或vim里面运行python程序时即调用winpython。

参与贡献

  1. Fork 本仓库
  2. 新建 Feat_xxx 分支
  3. 提交代码
  4. 新建 Pull Request

码云特技

  1. 使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md
  2. 码云官方博客 blog.gitee.com
  3. 你可以 https://gitee.com/explore 这个地址来了解码云上的优秀开源项目
  4. GVP 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目
  5. 码云官方提供的使用手册 https://gitee.com/help
  6. 码云封面人物是一档用来展示码云会员风采的栏目 https://gitee.com/gitee-stars/
GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the library's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. <signature of Ty Coon>, 1 April 1990 Ty Coon, President of Vice That's all there is to it!

简介

universal makefile 展开 收起
LGPL-2.1
取消

贡献者

全部

近期动态

加载更多
不能加载更多了
其他
1
https://gitee.com/imbit_mathmhb/Makefile.git
git@gitee.com:imbit_mathmhb/Makefile.git
imbit_mathmhb
Makefile
Makefile
master

搜索帮助