标签: automake

什么是Makefile.am和Makefile.in?

这两个文件主要出现在开源项目中.

它们是什么,它们是如何工作的?

automake makefile autotools

312
推荐指数
4
解决办法
17万
查看次数

C++库的目录结构

我正在开发一个C++库.最后,我想公开提供多个平台(至少Linux和Windows),以及一些示例和Python绑定.工作进展顺利,但目前该项目非常混乱,仅针对Visual C++构建,而不是多平台构建.

因此,我觉得清理是有序的.我想改进的第一件事是项目的目录结构.我想创建一个适合Automake工具的结构,以便在多个平台上轻松编译,但我以前从未使用过这些.由于我仍然会在Visual Studio中进行(大部分)编码,因此我需要在某处保留我的Visual Studio项目和解决方案文件.

我试图像谷歌"C++库目录结构"这样的术语,但似乎没有任何用处.我找到了一些非常基本的指导方针,但没有明确的解决方案

在查看一些开源库时,我想出了以下内容:

\mylib
    \mylib <source files, read somewhere to avoid 'src' directory>
        \include? or just mix .cpp and .h
    \bin <compiled examples, where to put the sources?>
    \python <Python bindings stuff>
    \lib <compiled library>
    \projects <VC++ project files, .sln goes in project root?>
    \include? 
    README
    AUTHORS
    ...
Run Code Online (Sandbox Code Playgroud)

我以前没有/很少有多平台开发/开源项目的经验,我很惊讶我找不到关于如何构建这样一个项目的任何好的指导.

人们应该如何构建这样的图书馆项目?建议阅读什么?有一些很好的例子吗?

c++ automake directory-structure

72
推荐指数
2
解决办法
3万
查看次数

如何克服"'aclocal-1.15'在您的系统上缺失"警告?

我试图在github上运行一个c ++程序.(可从以下链接获得https://github.com/mortehu/text-classifier)

我有一台Mac,我正试图在终端上运行它.我想我已经下载了autoconf和automake,但我不确定.要运行该程序,我将转到终端中正确的文件夹,然后运行

./configure && make 
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

警告:系统中缺少"aclocal-1.15".如果您修改'configure.ac'或'configure.ac'或'configure.ac'包含的m4文件,您应该只需要它.'aclocal'程序是GNU Automake软件包的一部分:http: //www.gnu.org/software/automake 它还需要GNU Autoconf,GNU m4和Perl才能运行:http : //www.gnu.org/software/autoconf http://www.gnu.org/software/m4/ http://www.perl.org/ make:***[aclocal.m4]错误127

我有xcode和g ++以及运行c程序所需的所有东西,但很明显,我不知道我在做什么.

在上面的链接中运行程序最简单,最简单的方法是什么?我意识到它带有自述文件和示例用法,但我无法让它工作.

c++ automake makefile github

67
推荐指数
7
解决办法
9万
查看次数

GNU autotools:调试/发布目标?

我一直在寻找这个:我目前正在将一个中型程序转换为autotools,来自基于Eclipse的方法(带有makefile)

我总是习惯于进行"调试"构建,包含所有调试符号和没有优化,以及"发布"构建,没有调试符号和最佳优化.

现在我试图用autotools以某种方式复制它,所以我可以(也许)做类似的事情:

./configure
make debug
Run Code Online (Sandbox Code Playgroud)

哪个会有所有调试符号而没有优化,以及哪里:

./configure
make
Run Code Online (Sandbox Code Playgroud)

会导致"发布"版本(默认)

PS:我已经阅读了关于--enable-debug标志/功能的内容,但在我目前的(简单)设置​​中,使用它无法识别 configure

c++ automake autoconf autotools

58
推荐指数
3
解决办法
4万
查看次数

如何使用"else if"在Makefile.am中编写多个条件

我想用autoconf/automake编译我的项目.我的configure.ac中定义了2个条件

AM_CONDITIONAL(HAVE_CLIENT, test $enable-client -eq 1)
AM_CONDITIONAL(HAVE_SERVER, test $enable-server -eq 1)
Run Code Online (Sandbox Code Playgroud)

我想在Makefile.am中将_LIBS与这两个条件分开

if HAVE_CLIENT

libtest_LIBS = \

    $(top_builddir)/libclient.la

else if HAVE_SERVER

libtest_LIBS = \

    $(top_builddir)/libserver.la

else

libtest_LIBS = 

endif
Run Code Online (Sandbox Code Playgroud)

else if HAVE_SERVER不起作用.

如何在makefile.am中写'else if'?

automake

53
推荐指数
5
解决办法
11万
查看次数

使用automake配置脚本在64位Linux上构建32位?

我使用的是64位系统但需要一组32位二进制文​​件.我必须将哪些选项传递给configure脚本才能生成32位/ x86 makefile?

automake autotools configure

51
推荐指数
3
解决办法
6万
查看次数

在配置/ make时,将编译标志附加到CFLAGS和CXXFLAGS

我正在尝试构建的项目具有默认标志

CFLAGS = -Wall -g -O2

CXXFLAGS = -g -O2
Run Code Online (Sandbox Code Playgroud)

我需要在-w这两个变量上附加一个标志(删除:'将所有警告视为错误')

我有办法解决,给

make 'CFLAGS=-Wall -g -O2 -w'; 'CXXFLAGS=-g -O2 -w'
Run Code Online (Sandbox Code Playgroud)

要么

运行./configure并静态修改Makefile

但我想追加我的选择与现有的选项运行时configuremake

帖子 将一个CFLAG(例如-std = gnu99)添加到autotools项目中的 位置可以方便地使用宏来实现此目的.

automake autoconf makefile configure

32
推荐指数
1
解决办法
8万
查看次数

gcov:从共享库生成.gcda输出?

是否可以通过运行链接到使用--coverage选项构建的共享库的可执行文件来生成gcov数据文件(.gcda文件)?

基本上,我有一个主库,它由多个编译成一个共享库的c ++文件组成,然后是一个名为"test"的子目录,其中包含一个链接到并测试主库的测试程序.一切都编译好,并为库源文件和测试源文件生成.gcno文件..gcda文件只为测试源文件生成,但我真的需要它们用于编译到共享库中的实际源文件.

有任何想法吗?

附加信息:
- 这是所有C++代码
- 一切都是使用由automake生成的make脚本构建的
- 在共享库中
为lib_la_CPPFLAGS和lib_la_LDFLAGS指定了--coverage选项Makefile.am - 为AM_CPPFLAGS和AM_LDFLAGS指定了--coverage选项在测试可执行文件Makefile.am中
- 测试源文件使用Google Test(C++单元测试框架)

编辑:固定间距问题

c++ automake gcc code-coverage gcov

28
推荐指数
1
解决办法
1万
查看次数

configure.ac和configure.in,Makefile.am和Makefile.in之间有什么区别?

我已经看到了我配置的不同的东西.我有什么区别?仅使用一个是值得注意的吗?或者使用哪一个无关紧要?

automake autoconf makefile configure

27
推荐指数
1
解决办法
1万
查看次数

自动生成二进制文件到bin /而不是src /

我搜索了这个问题的答案,但找不到任何好处.也许他们已经老了,事情发生了变化,所以我再问一次.

我有一个目录结构:

我的项目

  • SRC

  • 箱子

我想要的是,当我在根目录中制作时,二进制文件放在./bin中,而不是混乱./src.但是怎么样?

编辑:我正在使用C++.我的Makefile.am没什么特别的.只是bin_PROGRAM和_SOURCES变量.

当我运行make时,生成的二进制文件被放入./src.我只想把它们放在./bin中.

automake autoconf autotools

26
推荐指数
3
解决办法
1万
查看次数