标签: autotools

标题的宏定义,放置它们的位置?

当定义一个头靠宏,如_FILE_OFFSET_BITS,FUSE_USE_VERSION,_GNU_SOURCE等等,这里是把他们最好的地方?

我考虑过的一些可能性包括

  1. 位于依赖于该文件中包含的标头所公开的定义的任何源文件的顶部
  2. 紧接着包含相关标题之前
  3. CPPFLAGS通过编译器在级别定义?(例如-D_FILE_OFFSET_BITS=64)用于:
    1. 整个源代码回收
    2. 整个项目
    3. 只是需要它的来源
  4. 在项目标题中,还应包括宏应用的那些相关标题
  5. 其他一些我没有想过的地方,但是无限优越

注意:适用于制作,自动工具和其他构建系统的合理性是我决定的一个因素.

c macros header autotools build-system

13
推荐指数
1
解决办法
2133
查看次数

如何创建一个Debian包作为autotools构建的一部分?

我可以找到的所有Debian打包示例都假设用户从上游构建重新打包,因此它解压缩源tar包,配置,重建和重新打包.我正在尝试为自己的库构建一个包,它是使用autotools构建的.我尝试了几种不同的方法,我最近的尝试看起来像这样:

DH_PACKAGE_NAME=`echo $(PACKAGE_NAME) | sed s/_/-/g`
dist-hook:
    cd $(distdir) ; \
    export DEBFULLNAME="Some One" ; \
    export DEBEMAIL="someone@foo.com" ; \
    echo -e "\n" | dh_make --copyright blank --library --native \
        --packagename $(DH_PACKAGE_NAME)
    mv $(distdir)/debian $(distdir)/DEBIAN
    dpkg-deb --build $(distdir)
Run Code Online (Sandbox Code Playgroud)

为此dpkg-deb抱怨dh_makes控制文件.我有一个问题,解决方案更简单了吗?

debian automake packaging autotools

13
推荐指数
2
解决办法
4884
查看次数

Autoconf检查struct flock

fcntl()使用struct flock结构来定义和检查文件锁.不幸的是,在不同的Unix系统上,这种结构中的字段顺序不同.有没有人知道如何使用autoconf检查它或至少检查结构是否采用特定格式(例如,问题是 - 结构格式是否与Linux格式匹配)?

c unix linux autoconf autotools

13
推荐指数
1
解决办法
1030
查看次数

如何使用yocto配方为"配置"提供选项?

我想在yocto中写一个配方来构建我的自定义组件.在那我想根据机器启用一些标志.

例如:

如果机器是x86

我的configure命令应该是这样的:

./configure --enable-x86
Run Code Online (Sandbox Code Playgroud)

如果是x64

./configure --enable-x64
Run Code Online (Sandbox Code Playgroud)

我正在使用汽车工具进行建设.请帮我写配方以及"configure.ac"来实现这一目标.

ps:我对yocto很新.

linux autotools recipe cross-compiling yocto

13
推荐指数
1
解决办法
9862
查看次数

为什么没有人为脑死亡创建一个开源构建系统?

我想建立一个共享库.GNU/Linux是开发和目标平台.C是实现语言.

我无法决定如何设置构建系统并继续围绕三个选项,每个选项都有很多不喜欢的理由:

  • 手工制作的Makefile - 我过去几乎都是这样做的
  • GNU Autotools - 我今年早些时候使用autotools来构建一个共享的C库,但是忘记了我是如何做到这一点的,以及我用于搜索的所有数百个教程.
  • waf - 据说简单但不那么容易我今天下午工作了.

我无法决定去哪.我会选择一个,开始工作然后遇到问题,并决定其他系统更好.我卡住了卡住了.有人可以解释一下这可能有助于我解决这个问题吗?

build autotools configure waf

12
推荐指数
3
解决办法
2288
查看次数

如何在Make文件中定义#define

在我的c/c ++文件中,有多个#define.举个例子:

#ifdef LIBVNCSERVER_HAVE_LIBZ
  /* some code */
#ifdef LIBVNCSERVER_HAVE_LIBJPEG
  /* some more code */
Run Code Online (Sandbox Code Playgroud)

你能否告诉我如何修改我的Makefile.in以便在编译期间在所有文件中都有#define ?

谢谢.

c makefile autotools

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

autotools临时文件

我正在尝试为开源项目调试autotools问题,这在配置步骤失败了.我想看看配置的代码/可执行文件正在尝试运行.

但是,config.log只显示失败的东西(不是它试图编译的代码),我不知道临时可执行文件的存储位置(并且它们可能会被及时删除).

有没有办法让autotools保持其临时文件?在指定的级别无关紧要 - 无论是使用args进行配置,还是在生成configure时使用args到autoconf,或者甚至进行一些m4调用.

编辑当出现故障时,configure.log看起来像这样:

configure:3285: checking whether we are cross compiling
configure:3293: gcc -o conftest.exe -DU_STATIC_IMPLEMENTATION -O3   conftest.c  >&5
configure:3297: $? = 0
configure:3304: ./conftest
configure:3308: $? = 1
configure:3315: error: in `/home/bobthebuilder/Development/icu/build':
configure:3317: error: cannot run C compiled programs.
If you meant to cross compile, use `--host'.
See `config.log' for more details
Run Code Online (Sandbox Code Playgroud)

autoconf autotools

12
推荐指数
1
解决办法
2486
查看次数

CMake可以生成配置文件吗?

我需要配置文件从C++转换为JS,我试图在项目中使用emscripten.Emscripte附带了一个名为emconfigure的工具,它取代了autoconf配置,

但我正在构建的项目使用cmake作为构建系统,目前(1月12日)emscripten只支持autoconf - 所以我通过生成configure并在make上做一个端口来绕过它,所以有一种方法可以创建来自cmake的配置文件?? 我不是在讨论make文件..而是配置文件本身.

c++ build autotools configure cmake

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

如何使用Autoconf通过"./configure"设置定义

我有一个项目可以基于一个定义生成两个不同的应用程序.

libfoo_la_CXXFLAGS = -DMYDEFINE
Run Code Online (Sandbox Code Playgroud)

我必须修改Makefile.am来设置这个定义,所以它不是自动的.

我可以通过configure命令以某种方式设置此定义吗?有没有其他方法可以使用autotools设置一个定义?

c++ automake autoconf autotools configure

12
推荐指数
2
解决办法
9854
查看次数

libtool链接到32位版本的libstdc ++.所以当安装了多个版本的gcc时,在64位目标平台上

首先,我想告诉你这是我在StackOverflow上的第一篇文章,所以我希望通过提出一个非常愚蠢的问题,我不会愚弄自己.我一直在谷歌上搜索这个问题几天了,到目前为止我找不到任何答案.

情况如下:

我正在研究用autotools管理的C++项目.目标平台是RHEL5 64bit,安装了两个版本的gcc:

  • gcc 4.1.2安装在/ usr中
  • gcc 4.3.5安装在/local/opt/gcc-4.3.5中

当我使用默认的gcc版本(4.1.2)构建我的项目时,一切都很顺利,但是当我切换到gcc 4.3.5时,我在链接时遇到这个错误:

/local/opt/gcc-4.3.5/lib/../lib/libstdc++.so: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

似乎libtool硬编码了32位版本的libstdc ++的路径.所以在命令行中,它应该是64位版本.更确切地说,失败的libtool调用是:

/bin/sh ./libtool --tag=CXX --mode=link g++  -m64   -o libfoo.la -rpath /local/opt/foo/lib  src/foo/libfoo_la-bar1.lo src/foo/libfoo_la-bar2.lo
Run Code Online (Sandbox Code Playgroud)

由libtool翻译为:

g++ -shared -nostdlib
/usr/lib/../lib64/crti.o
/local/opt/gcc-4.3.5/lib/gcc/x86_64-unknown-linux-gnu/4.3.5/crtbeginS.o
src/foo/.libs/libfoo_la-bar1.o
src/foo/.libs/libfoo_la-bar2.o
-Wl,--rpath
-Wl,/local/opt/gcc-4.3.5/lib/../lib
-Wl,--rpath
-Wl,/local/opt/gcc-4.3.5/lib/../lib
-L/local/opt/gcc-4.3.5/lib/gcc/x86_64-unknown-linux-gnu/4.3.5
-L/local/opt/gcc-4.3.5/lib/gcc/x86_64-unknown-linux-gnu/4.3.5/../../../../lib64
-L/lib/../lib64
-L/usr/lib/../lib64
-L/local/opt/gcc-4.3.5/lib/gcc/x86_64-unknown-linux-gnu/4.3.5/../../..
/local/opt/gcc-4.3.5/lib/../lib/libstdc++.so
-lm -lc -lgcc_s
/local/opt/gcc-4.3.5/lib/gcc/x86_64-unknown-linux-gnu/4.3.5/crtendS.o
/usr/lib/../lib64/crtn.o
-m64 -Wl,-soname -Wl,libfoo.so.0 -o .libs/libfoo.so.0.0.0
Run Code Online (Sandbox Code Playgroud)

我应该准确地说,我用来从默认gcc切换到gcc 4.3.5的方法如下:

$ export PATH=/local/opt/gcc-4.3.5/bin:$PATH
$ export LD_LIBRARY_PATH=/local/opt/gcc-4.3.5/lib:/local/opt/gcc-4.3.5/lib64:$LD_LIBRARY_PATH
$ export GCC_HOME=/local/opt/gcc-4.3.5
Run Code Online (Sandbox Code Playgroud)

我对所有这些工具都很陌生,所以我怀疑我做错了什么.如果有人能给我一个如何解决这个问题的线索,我将非常感激. …

linux gcc autotools libtool 32bit-64bit

12
推荐指数
1
解决办法
7024
查看次数