首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么automake要在我的目标文件前加上包名?

Automake 是一个用于生成 Makefile 文件的工具,它主要用于 GNU 软件包的开发。Automake 会在生成的目标文件前加上包名,这是为了确保在不同的软件包之间不会出现命名冲突,并且能够清晰地标识出每个目标文件所属的软件包。

基础概念

  • Makefile: 是一个构建工具,用于自动化编译和链接程序的过程。
  • Automake: 是一个脚本工具,用于生成标准的 Makefile.in 文件,这些文件随后会被 configure 脚本处理成最终的 Makefile。

相关优势

  1. 避免命名冲突: 在大型项目中或者多个软件包共存的环境中,通过添加包名作为前缀,可以有效避免不同软件包之间的目标文件命名冲突。
  2. 清晰的依赖关系: 加上包名可以帮助开发者理解每个目标文件的来源,从而更好地管理项目的依赖关系。
  3. 易于维护: 当项目结构复杂时,带有包名的目标文件可以让维护工作更加直观和简单。

类型与应用场景

Automake 支持多种类型的项目构建,包括但不限于:

  • 库文件: 如静态库 .a 和共享库 .so
  • 可执行文件: 程序的最终输出。
  • 脚本文件: 如 shell 脚本或其他类型的脚本。

应用场景广泛,适用于任何需要自动化构建过程的软件项目。

遇到问题的原因及解决方法

如果你不希望在目标文件前加上包名,可以通过修改 Automake 的配置文件来实现。通常,这涉及到编辑 Makefile.am 文件,调整相关的变量定义。

例如,如果你想要改变默认的目标文件命名规则,可以在 Makefile.am 中设置 target_prefix 变量:

代码语言:txt
复制
target_prefix = myprefix_

这将使得所有的目标文件名都以 myprefix_ 开头,而不是默认的包名。

此外,如果你想要完全去除包名前缀,可以尝试设置 target_prefix 为空字符串:

代码语言:txt
复制
target_prefix =

然后重新运行 Automake 和 configure 脚本,生成新的 Makefile。

示例代码

假设你有一个简单的 Automake 项目,其目录结构和 Makefile.am 文件如下:

代码语言:txt
复制
myproject/
├── src
│   ├── main.c
│   └── Makefile.am
└── Makefile.am

src/Makefile.am 中,你可以这样设置:

代码语言:txt
复制
bin_PROGRAMS = myprogram
myprogram_SOURCES = main.c

这将生成一个名为 myprogram 的可执行文件。如果你想要改变这个名称,可以添加 target_prefix

代码语言:txt
复制
target_prefix = custom_
bin_PROGRAMS = myprogram
myprogram_SOURCES = main.c

重新运行 Automake 和 configure 后,生成的可执行文件将会是 custom_myprogram

总之,Automake 加上包名是为了避免冲突和提高项目的可维护性。如果有特殊需求,可以通过调整 Makefile.am 中的相关设置来定制目标文件的命名规则。

相关搜索:在.htaccess文件中设置服务器变量需要在变量名前加上REQUEST_前缀为什么vs代码在我的文件搜索前加上一个哈希值?即'#‘如何使用VBScript重命名目录中的文件,并在文件夹中的所有文件前加上文件夹名?当我链接目标文件时,为什么我的pdb文件缺少符号?为什么MinGW在编译时无法识别我的目标文件?如何在使用Meteor Edgee:SlingShot包时修改上传前的文件名为什么我不能重命名react组件的文件名?当我们想要运行一个可执行的c++文件时,为什么我们需要在它前面加上"./“?为什么我的bash执行的python脚本只将文件名输出到txt文件?我想要将100万个特定扩展名的文件移到linux中的目标文件夹中为什么重定位SDK后我的Android SDK包文件丢失了?为什么我的python总是运行另一个包的文件有没有可能在实现文件中使用名称空间或等效的名称空间,以避免在每个函数前加上类名?如果文件名包含单引号/撇号,为什么我的路径失败?为什么我需要在jar文件中查找没有包含在maven pom.xml文件中的类?为什么我的npm包的所有文件都安装在node_modules中?为什么Flowcore包中的函数Write.fcs会损坏我的FCS文件按数组中文件名的前13个字符对我从光盘读取的XML文件进行排序我有一个有分数的游戏,我想按前5名的顺序将它们保存到txt文件中。当我有更好的规则时,为什么要在我的lex文件中匹配最后一个规则?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

php autoconf 配置,automake,autoconf使用详解

大家好,又见面了,我是你们的朋友全栈君。...Makefile.am中定义的 宏和目标,会指导automake生成指定的 代码.例如,宏bin_PROGRAMS将导致编译和连接的 目标被生成. 5.运行automake: $ automake –add-missing...有规定,但是 你必须在 所有宏的 最前面和最后面分别加上AC_INIT宏和AC_OUTPUT宏....的 选项.在 执行automake时,它会检查目录下是 否存在 标准 GNU软件包中应具备的各种文件,例如AUTHORS.ChangeLog.NEWS等文件....我们将其设置成foreign时,automake会改用一般软件包的 标准来检查. bin_PROGRAMS 这个是 指定我们所要产生的 可执行文件的 文件名.如果你要产生多个可执行文件, 那么在各个名字间用空格隔开

75600

自动生成Makefile的全过程详解

Makefile.am中定义的宏和目标,会指导automake生成指定的代码。例如,宏bin_PROGRAMS将导致编译和连接的目标被生成。...autoscan可以用目录名做为参数,但如果你不使用参数的话,那么 autoscan将认为使用的是当前目录。autoscan将扫描你所指定目录中的源文件,并创建configure.scan文件。...configure.in文件中的宏的顺序并没有规定,但是你必须在所有宏的最前 面和最后面分别加上AC_INIT宏和AC_OUTPUT宏。...在执行automake时,它会检查目录下是否存在标准GNU软件包中应具备的各种文件,例如AUTHORS、ChangeLog、NEWS等文件。...我们将其设置成foreign时,automake会改用一般软件包的标准来检查。 bin_PROGRAMS 这个是指定我们所要产生的可执行文件的文件名。

1.8K20
  • Linux下automake工具使用(自动构建Makefile文件)

    下面将介绍如何利用 GNU Autoconf 及 Automake 这两套工具来协助我们自动产生 Makefile文件,并且让开发出来的软件可以像大多数源码包那样,只需"....如果系统没有安装Automake工具,红帽子系统可以挂载光盘找到安装包进行安装 如果是ubuntu系统可以通过命令在线下载工具: sudo apt-get install autoconf automake...等级,它只检测必须的文件 第二项:生成的可执行文件名 第三项:生成可执行文件所需的原始文件,有多个文件时用空格隔开。...约定俗成的,所有的configure脚本都把脚本文件名起为configure,一般来讲都是shell脚本,根据所在的系统环境生成makefile文件。...,用于引用.o 等一些编译出来的目标文件 $(prefix) 定义了软件的安装的路径 1) automake标准安装路径 默认安装路径为:$(prefix) = /usr/local,可以通过.

    8.1K31

    Ubuntu实现树莓派交叉编译

    要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译源代码,最终生成可在目标平台上运行的代码。    ...二、名词解释 Linux下的大多数软件包都使用Autoconf/Automake工具自动生成Makefile,只要使用“....>> --target: 这个参数比较特殊,表示需要处理的目标平台名称,主要在程序语言工具如编译器和汇编器上下文中起作用,若无指定使用host的值。...2、Makefile包含了一些基本的预先定义的操作: >>make: 根据Makefile编译源代码,连接,生成目标文件,可执行文件; >>make clean: 清除上次的make...将交叉编译工具的路径加到环境变量中,为了以后启动不用再设置,我加到了bashrc中 1 $nano ~/.bashrc 2 #在文件的末尾加上: export PATH=$PATH

    2.6K50

    Centos7.3云服务器上安装Nginx、MySQL、JDK、Tomcat环境

    ~]# chown 账号名称 文件或目录 ② 改变文件的用户组用命令 chgrp [root@linux ~]# chgrp 组名 文件或目录 ③ 对于目录权限修改之后,默认只是修改当前级别的权限...centos7.3下没有反应,故尝试第二种方法 方法二: 1.修改MySQL的登录设置: vim /etc/my.cnf 在 [mysqld] 的段中加上一句: skip-grant-tables 2...vim /etc/my.cnf 将刚才在 [mysqld] 的段中加上的skip-grant-tables注释掉 # skip-grant-tables 保存并且退出vim 5.重新启动mysql...sytemctl mysql restart 在此之后,重新登录mysql时还是会有即使设置了密码,登录时还是不需要密码的状态,这个时候需要的就是重启服务器: reboot 如果需要在本地Navicat...远程登录服务器上的mysql,可以参考我的这篇文章: https://blog.csdn.net/qq_41684621/article/details/95313147

    1.8K10

    如何无网络下免编译的安装程序(RPM包)

    学习完大神的文章还是有一些细节不太清楚,下面我就再对编译RPM包的过程和详细知识点再梳理扩展一下留作备忘。...我们可以在有网的环境下载rpm包,也可以定制化的将自己的软件打成rpm包。 准备rpm打包环境 我这里用的操作系统是CentOS6.7,redhat系的其它发行版应该也类似。...--showrc rpmbuild spec规范说明 Summary: 软件包的内容概要描述 Name: 软件包的名称(spec文件名与其一致) Version: 软件的实际版本号,具体和源码包一致...%clean: 清理一些暂存文件 %files: 定义哪些文件或者目录会放入rpm中 %pre: rpm安装前执行的动作 %post: rpm安装后执行的动作 %preun: 卸载前执行脚本程序(preun...(Query All) rpm -qi [软件名称]: 列出该软件的详细信息 rpm -qf [指定文件名]: 查找指定文件属于哪个RPM软件包(Query Files) rpm -qc [软件名称]:

    2.2K170

    Linux中的configure,make,make install到底在做些什么

    有时候我就在想,这个configure,make ,make install是什么意思呢,configure是测试存在的特性,然后make开始编译,make install生成相应的可执行文件。...先提提m4, m4是一种宏处理器,它是 POSIX 标准的一部分。为什么叫m4呢,全称是macro,m后面有4个字母,据说是这样的,哈哈。...比如AC_INIT([helloworld],[0.1],[xxx@xxx.com])的含义是autoconf生成包的名字,版本(这个可以自己定义),反馈邮箱, AM_INIT_AUTOMAKE是检查...此处AUTOMAKE_OPTIONS使用的是foreign,表示只检测必要的文件。...bin_PROGRAMS定义了要产生的执行文件名,这里我们定义为helloworld file_SOURCES定义file这个执行程序的依赖文件,其中“file_SOURCES”中的前部分“file”要改写成可执行文件名

    3.9K30

    Centos7.3云服务器上安装Nginx、MySQL、JDK、Tomcat环境

    /configure --prefix=/usr/local/nginx yum -y install gcc gcc-c++ autoconf automake make //安装c编译器 make...~# chown 账号名称 文件或目录 ② 改变文件的用户组用命令 chgrp root@linux ~# chgrp 组名 文件或目录 ③ 对于目录权限修改之后,默认只是修改当前级别的权限。...centos7.3下没有反应,故尝试第二种方法 方法二: 1.修改MySQL的登录设置: vim /etc/my.cnf 在 mysqld 的段中加上一句: skip-grant-tables 2.重新启动...vim /etc/my.cnf 将刚才在 mysqld 的段中加上的skip-grant-tables注释掉 # skip-grant-tables 保存并且退出vim 5.重新启动mysql sytemctl...mysql restart 在此之后,重新登录mysql时还是会有即使设置了密码,登录时还是不需要密码的状态,这个时候需要的就是重启服务器: reboot 如果需要在本地Navicat远程登录服务器上的

    2.3K00

    Linux中的configure,make,make install到底在做些什么

    有时候我就在想,这个configure,make ,make install是什么意思呢,configure是测试存在的特性,然后make开始编译,make install生成相应的可执行文件。...为什么叫m4呢,全称是macro,m后面有4个字母,据说是这样的,哈哈。...我写了一段非常简单的c程序,就凑合着编译着用吧。...比如AC_INIT([helloworld],[0.1],[xxx@xxx.com])的含义是autoconf生成包的名字,版本(这个可以自己定义),反馈邮箱, AM_INIT_AUTOMAKE是检查...bin_PROGRAMS定义了要产生的执行文件名,这里我们定义为helloworld file_SOURCES定义file这个执行程序的依赖文件,其中“file_SOURCES”中的前部分“file”要改写成可执行文件名

    3.3K40

    Autoconf编译配置

    大家好,又见面了,我是你们的朋友全栈君。 1、大型项目编译过程 ....2)make make是一个命令,它使用第1步得到的Makefile文件,如果只有”make”命令,而没有指明”目标”,一般情况下是编译源码。...调用automake,将每个Makefile.am转化成Makefile.in,同时生成满足GNU编码规范的一系列文件(带-a选项自动添加缺少的文件,但有几个仍需要自己添加,在执行automake前需执行...如果configure.ac配置了使用libtool(定义了AC_PROG_LIBTOOL宏(老版本)或LT_INIT宏),需要在此步骤前先在项目根目录执行libtoolize –automake –copy...需要操作的过程: 【修改configure.ac文件】 添加AM_INIT_AUTOMAKE宏 AM_INIT_AUTOMAKE是检查automake尝试Makefile时的工具,传到这个宏里的参数是要编译的应用程序的名称和版本号

    1.2K50

    JDK之动态代理(JDK与CGLIB)与静态代理

    相比较静态代理,动态代理的优势在于可以很方便的对代理类的函数进行统一的处理,而不用修改每个代理类中的方法,比如想要在每个代理方法前都加上一个处理方法,静态代理就需要在每个类内部加上这个方法 静态代理与动态代理的区别...在调用具体方法前通过调用InvokeHandler的invoke方法来处理。...class Student implements Person{ @Override public void sayHi() { System.out.println("Hi 我是一名学生...动态代理是利用 asm 开源包,将目标对象类的 class 文件加载进来,然后修改其字节码生成新的子类来进行扩展处理 ... public class Student { public void sayHi(){ System.out.println("Hi 我是一名学生

    21420

    基于腾讯云cos的图床教程

    作为一个爱琢磨的人,我也打算搞一个自己的图床网站,以后所有的图片都放这上面了,这样一来节省了不少流量和空间,还可以用这个网站发布一些高清的图片。...那么问题来了,目前网上有些程序对接腾讯云的cos需要在程序里面录入密钥信息不安全怎么办,那么为了安全应该怎么做呢?...我在查找资料的时候知道了腾讯云还有个COSFS的东西,通过这个软件就可以把你的cos盘挂载到你主机的目录上。注意:该方法不适合那种高并发的需要进行大量IO读写的操作。...安装依赖软件COSFS 的编译安装依赖于 automake、git、libcurl-devel、libxml2-devel、fuse-devel、make、openssl-devel 等软件包,Ubuntu...:当然,如果我们直接这样设置的话,你的图床是无法直接访问自己挂载的目录的(默认是只有root用户才能修改)我们需要修改访问权限:在你挂载的时候在命令行后面加上 -oallow_other服务器重启后需要重新挂载

    3.8K31

    Autotools -- 自动编译链工程构建

    笔者的打包工作历程,也是从简单的可执行文件的拷贝到生成安装包,也是走全了。但是实际工作一直也没有深究过编译语法,打包工具的编写。到前一段时间,自己梳理了常用的编译,安装语法等。...$(top_builddor) 定义了生成目标文件上最上层目录,用于引用.o 等编译出来的目标文件 详细说明请看博文:Makefile.am 下述是笔者编写的Makefile 第一层目录的Makefile...AC_PREREQ([2.69]) #autoconf 版本 AC_INIT(gameserver, 1.0, 779508400@qq.com) # 工程信息 (目标文件名, 版本信息,联系信息) AM_INIT_AUTOMAKE...(gameserver, 1.0) #添加 AM_INIT_AUTOMAKE(目标文件名, 版本信息) 必须需要 AC_CONFIG_SRCDIR([src/main.cpp]) # 生成可执行文件的cpp...automake --add-missing’ ,其目的是,生成 Makefile.in 并且 添加缺少 生成 包 所缺少的依赖文件。

    82520

    推荐几款好用的IDEA插件,一定不要错过!

    image-20220126134553924在弹出界面选择要生成的包和需要的文件即可:?image-20220127090210514可以在settings里面设置相关的一些配置:?...IDE和JDK升级存在破裂的风险,并且围绕项目的目标和实施存在争议。...需要提前配置随机文件夹路径,可以选择随机时间,这里我选择的是300min,如下图:?image-20220125131236320然后在View下选择随机背景图片,即可展示文件夹内预存的图片为背景:?...image-20220121093342824根据需求选择要生成的model、mapper、mapper xml等,点击ok即可在指定路径生成所需文件。这里我选择的比较多,具体可根据实际需求进行选择。...如果想看是否有依赖包冲突的话也需要输入命令行等等的操作。而如果安装Maven Helper插件就可免去复杂的命令行操作(至少对于初学者而言是这样的)。通过UI界面即可完成相关操作,十分方便。

    2.7K20
    领券