首页 > 其他分享 >如何在CMakeList项目中集成GNU Autotools 构建模块

如何在CMakeList项目中集成GNU Autotools 构建模块

时间:2024-09-26 13:51:01浏览次数:10  
标签:CMakeList set CMAKE GNU SOURCE install Autotools DIR

背景:

我有三个工具A,B,C,其中A,B是原先MakeFile编译的工具,C是原先GNU Auto tools自动编译的工具。现在希望使用CMakeList统一构建,我的目录如下:
|
|–A
|-----/src
|-----CMakeList.txt
|–B
|-----/src
|-----CMakeList.txt
|–C
|----- autoTool
|–CMakeList.txt

想要起到的效果是我在根目录下:

mkdir build
cd build
cmake ..
make 
make install

就能生成A, B,C的可执行文件,并安装到/usr/local/bin中。

方案:

对于最外层根目录的CMakeList,我们引入AB的目录,并引入C自由编译的插件。
下面展示一些 内联代码片



cmake_minimum_required(VERSION 3.10)

# 项目名称
project(tools VERSION 1.0)

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

#引入A、B 子模块
add_subdirectory(A)
add_subdirectory(B)


#设置C子模块目录
set(CDir ${CMAKE_SOURCE_DIR}/C)


include(ExternalProject)

ExternalProject_Add(
    C
    SOURCE_DIR ${CDir} # 指定 C子目录
    CONFIGURE_COMMAND cd  ${CDir} && autoreconf -fv --install && ./configure 
    BUILD_COMMAND cd  ${CDir} && make
    INSTALL_COMMAND cd  ${CDir} && make install
)


# 将 C的可执行文件安装到 bin 目录,这里第一个C是目录名,第二个C是可执行文件名。
install(PROGRAMS ${CMAKE_SOURCE_DIR}/C/C DESTINATION /usr/local/bin)

A目录下的CMakeList.txt:
下面展示一些 内联代码片


cmake_minimum_required(VERSION 3.10)

# 项目名称和版本
project(A VERSION 1.0)

# 设置 C 编译器
set(CMAKE_C_COMPILER gcc)

# 编译选项
set(CMAKE_C_FLAGS "-O3 -Wall -Wno-unused-but-set-variable -DVERSION=\\\"${PROJECT_VERSION}\\\"")

# 可执行文件名称
set(EXEC_NAME A)

# 设置源文件目录
set(A_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
set(A_HEADER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)

# 源文件列表
set(SOURCES
${A_SOURCE_DIR}/example1.c
${A_SOURCE_DIR}/example2.c
)

set(HEADERS
${A_HEADER_DIR}/example1.h
${A_HEADER_DIR}/example2.h
)

# 生成可执行文件
add_executable(${EXEC_NAME} ${SOURCES})


# 指定头文件目录
target_include_directories(${EXEC_NAME} PRIVATE ${A_HEADER_DIR})

# 安装规则 (用于 `make install`)
install(TARGETS ${EXEC_NAME} DESTINATION /usr/local/bin)

B目录下的CMakeList.txt同理。

标签:CMakeList,set,CMAKE,GNU,SOURCE,install,Autotools,DIR
From: https://blog.csdn.net/dedanddwb/article/details/142553828

相关文章

  • 一个cmakelist的例子(自动处理多个proto)
    背景:由于项目需要,把所有的proto文件放在了统一的文件夹中,为了方便更新以及加快编译速度,要把这个proto自动转成.cc.pb.h文件,再编译成so。为此,写了个cmakelist.txt。 主要功能:1)自动遍历指定目录下所有proto文件,调用ptotoc生成.cc文件,如下图:cc文件存放在上一级目录,目录结构类......
  • CMakeLists.txt 和 Makefile
    CMakeLists.txt和Makefile都是用于自动化编译和构建软件项目的配置文件,但它们在构建系统中扮演不同的角色,并且使用不同的构建工具。CMakeLists.txtCMakeLists.txt 文件是CMake构建系统的配置文件。CMake是一个跨平台的自动化构建系统,它使用 CMakeLists.txt 文件来生......
  • 使用Cmake-编写CMakeLists.txt 文件
    好处:a)跨平台(makefile跟平台强相关)b)cmake可以自动生成makefile编写CMakeLists.txt文件#关键主体:cmake_minimum_required(VERSION3.10)#指定最低支持的CMake版本project(FunMainVERSION1.0)#定义项目名称及版本号#添加可执行文件add_executable(${PROJECT_N......
  • Gnu: binutils: ld: .gnu.warning.链接时的主动警告 glibc
    这个是一个gnu的extension,glibc会使用这个功能,标记即将被淘汰的符号,产生链接时的警告,比如:/*WhenareferencetoSYMBOLisencountered,thelinkerwillemitawarningmessageMSG.*//*Wewantthe.gnu.warning.SYMBOLsectiontobeunallocated.*/#defin......
  • GNU与Linux 的关系
    问题1:GNOME是什么?GNOME是一个自由且开放源代码的桌面环境,广泛用于基于Linux和其他类Unix操作系统的计算机上。GNOME(GNUNetworkObjectModelEnvironment)的设计目标是提供一个简单、易于使用且现代化的用户界面,让用户能够轻松管理和操作系统资源。主要特性:用户友好:GNOM......
  • GNU 汇编语法基础
     目录一、引言二、GNU汇编基本结构1.指令格式2.注释3.段三、寄存器和寻址方式1.寄存器命名2.寻址方式四、指令集 1.数据传送指令2.算术运算指令 3.逻辑运算指令4.控制流指令 五、宏和函数 1.宏定义 2. 函数定义六、总结 一、引言     ......
  • 【c++实用】CMakeLists 基本用法(一)
    指令解释cmake_minimum_required(VERSION3.24):指令指定了所需的最低CMake版本a.作用:确保在执行CMake配置时,使用的CMake版本不低于3.24。如果安装的CMake版本低于指定的版本,CMake将会输出错误信息,并拒绝继续执行后续命令b.兼容性:有助于确保项目构建脚......
  • <architecture>-linux-gnu-gcc
    ./configure--enable-win64yuminstalllibstdc++-*.i686yuminstallglibc-*.i686yuminstalllibgcc.i686sudodpkg--add-architecturei386sudoaptupdate安装相应的32位库,库名后面加上:i386,比如libc6:i386,libstdc++6:i386,libncurses5:i386sudodpkg--add-architec......
  • __gnu_pbds::tree 用法简介
    __gnu_pbds::tree用法简介概述pbds即平板电视,里面实现了很多数据结构,NOI系列赛事可以使用,但很多OJ和网站无法使用。其中有__gnu_pbds::tree,是平衡树,支持查找位置、查找第\(k\)大、分裂、合并。功能远强与std::set。性能实现是红黑树,空间常数是Treap的\(1.5\)倍,时......
  • 视觉SLAM ch3补充——在Linux中配置VScode以及CMakeLists如何添加Eigen库
            ch3中的所有代码,除了在kdevelop中运行,还可以在VScode中运行。下面将简要演示配置过程,代码不再做解答,详细内容在下面的文章中。(这一节中的pangolin由于安装过程中会出现很多问题,且后续内容用不到该平台,所以暂时不进行安装)视觉SLAMch3—三维空间的刚体运动http......