入门最简单的hello world
sudo yum install cmake automake
需要使用的命令make autoscan aclocal autoconf automake cmake
一、新建一个C文件
vi hello.c
#include <stdio.h>
int main (int argc,char **argv)
{
printf("hello word!\n");
}
手动编译
gcc hello.c -o hello
运行测试
./hello
二、新建一个Makeifle,实现自动编译及安装
vi Makeifle
all:
gcc hello.c -o hello
install:
sudo cp hello /bin/hello
uninstall:
sudo rm -rf /bin/hello
clean:
sudo rm -rf hello
注意:上面的不是空格,是一个TAB键,不然会提示错误。
三、测试命令
编译
make
安装
make install
卸载
make uninstall
清除
make clean
运行测试
hello
四、使用cmake构建工程
1、新建CMakeLists.txt注意大小写
vi CMakeLists.txt
cmake_minimum_required(VERSION 3.8)
project(hello)
set(CMAKE_CXX_STANDARD 11)
add_executable(hello hello.c)
第一行要求最小的cmake版本
第二行工程名称
第三行使用标准C版本
第四行源文件及生成文件
2、配置构建
cmake .
3、编译
make
4、安装及删除
sudo make install
sudo make uninstall
五、使用automake构建工程
1、自动扫描
使用autoscan命令生成configure.scan
2、复制文件
cp configure.scan configure.ac
3、修改文件vi configure.ac如下:
AC_PREREQ([2.71])
AC_INIT(hello.c)
AM_INIT_AUTOMAKE(hello,1.0)
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT(Makefile)
4、使用aclocal命令
5、使用autoconf命令
6、修改文件 vi Makefile.am如下:
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS = hello
hello_SOURCES = hello.c
7、使用automake --add-missing
将Makefile.am 转为Makefile.in
8生成configure文件
测试
./configure --prefix=/usr
make
sudo make install
sudo make uninstall
六、linux环境下RPM打包
1、准备工作
安装环境依赖包
sudo yum install rpm-build rpm-devel rpmlint fftw-devel bash coreutils diffutils patch rpmdevtools
2、RPM目录
BUILD目录: %_builddir tar.gz包解压缩位置在此编译安装
SPECS目录: %_specdir SPEC文件
RPMS目录: %_rpmdir rpm包
SOURCES目录: %_sourcedir 源代码
SRPMS目录: %_srcrpmdir srpm包
BUILDROOT目录: %_buildrootdir make install临时./configure中—prefix指定path的
3、制作过程
读取并解析spec 文件
运行 %prep 将源代码解包临时目录并打补丁。
运行 %build 编译。
运行 %install 将代码安装目录。
读取 %files 收集、创建RPM 文件。
运行 %clean 清除临时目录。
4、rpmbuild用法
rpmbuild -bp 执行到%prep
rpmbuild -bc 执行到%build中的config
rpmbuild -bi 执行到%build中的install
rpmbuild -ba 制作rpm包和src.rpm包
rpmbuild -bs 制作src.rpm包
rpmbuild -bb 制作rpm包
5、SPEC文件说明
Name 与SPEC一致
Version 软件上游版本号。
Release RPM 软件版本号。初始值通常应为 1%{?dist}。
Summary RPM 包的简要说明
License 软件许可证。
URL 打包的软件的上游项目网站。
Source0 上游源代码的压缩归档的路径,如:Source1,Source2,Source3等。
Patch0 补丁,如:Patch1,Patch2,Patch3 等。
BuildArch 表示 RPM 包架构。若不依赖于体系结构 BuildArch:noarch。
BuildRequires 编译依赖包列表,以逗号分隔。
Requires 安装依赖包列表,以逗号分隔。
ExcludeArch 如果某个软件无法在特定处理器架构下运行,在此进行指定。
6、宏代码
%{_sysconfdir} /etc
%{_prefix} /usr
%{_exec_prefix} %{_prefix}
%{_bindir} %{_exec_prefix}/bin
%{_libdir} %{_exec_prefix}/%{_lib}
%{_libexecdir} %{_exec_prefix}/libexec
%{_sbindir} %{_exec_prefix}/sbin
%{_sharedstatedir} /var/lib
%{_datarootdir} %{_prefix}/share
%{_datadir} %{_datarootdir}
%{_includedir} %{_prefix}/include
%{_infodir} /usr/share/info
%{_mandir} /usr/share/man
%{_localstatedir} /var
%{_initddir} %{_sysconfdir}/rc.d/init.d
%{_var} /var
%{_tmppath} %{_var}/tmp
%{_usr} /usr
%{_usrsrc} %{_usr}/src
%{_lib} lib (lib64 on 64bit multilib systems)
%{_docdir} %{_datadir}/doc
%{buildroot} %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}
$RPM_BUILD_ROOT %{buildroot}
7、实例hello word
a、将上面的文件打包,作为测试,可以添加README文件
tar czvf hello-0.1-1.tar.gz hello
把压缩的文件复制到~/rpmbuild/SOURCES目录下
cd ~/rpmbuild/SPECS
b、编写SPECS文件vi hello.SPECS如下:
Summary: the First RPM for test
Name: hello
Version: 0.1
Release: 1
License: GPL
Group: Development/System
Source0:hello-0.1-1.tar.gz
#Patch0:hello-0.1-1.patch
%description
print hello world
%prep
tar xzvf %_sourcedir/hello-0.1-1.tar.gz -C %_builddir/
#tar xzvf $RPM_SOURCE_DIR/hello-0.1-1.tar.gz -C $RPM_BUILD_DIR/
#%patch -p0
%build
cd $RPM_BUILD_DIR/hello
#在这里可以用./configre 或cmake来配置,可以根据上面的实际配置,哪个都行
make
%install
cd $RPM_BUILD_DIR/hello
make install
mkdir -p %{buildroot}%{_bindir}
install -p -m 755 hello $RPM_BUILD_ROOT%{_bindir}/hello
#mkdir -p %{buildroot}/usr/bin
#cp hello %{buildroot}/usr/bin/hello
%clean
rm -rf $RPM_BUILD_DIR/hello
%files
%defattr(-,root,root)
%{_bindir}/hello
%doc $RPM_BUILD_DIR/hello/README
%changelog
c、使用RPM打包命令测试
rpmbuild -bp
rpmbilld -bc
rpmbilld -bi
rpmbilld -ba
d、测试安装
sudo rpm -ivh XXXX.rpm