标签: automake

JNI和Java:ant调用make或者调用ant?

我正准备第一次进入JNI(Java Native Interface)世界,提供从平台特定的C/C++代码到Java的文件系统更改通知.这是除非有人建议一些出色的库,因为我错过了这个.

作为JNI的新手我已经设法在它的接口端和它的库生成方面找到了很多文档,但是我没有找到很多关于构建本机库的知识.

我已经有一个基于ant的现有版本用于预先存在的Java源代码,所以我正在尝试研究如果我应该使用ant调用make来创建库,或者如果最好让make在创建后调用ant图书馆?

这两个选项都没有跳出来非常好,但两者似乎都比试图让ant调用编译器来编译代码并直接生成库更好.

java ant java-native-interface automake makefile

5
推荐指数
1
解决办法
3347
查看次数

Automake和具有相同名称的文件

我有一个C++ autoconf托管项目,我正在适应在FreeBSD主机上编译.最初的系统是Linux,所以我做了一个AM_CONDITIONAL来区分我正在构建的主机并将代码分成系统特定的文件.

configure.ac


AC_CANONICAL_HOST
AM_CONDITIONAL([IS_FREEBSD],false)
case $host in
        *free*)    
            AC_DEFINE([IS_FREEBSD],[1],[FreeBSD Host])
            AM_CONDITIONAL([IS_FREEBSD],true)
            BP_ADD_LDFLAG([-L/usr/local/lib])
                ;;
esac

Makefile.am


lib_LTLIBRARIES=mylib.la
mylib_la_SOURCES=a.cpp \
                 b.cpp

if IS_FREEBSD
    mylib_la_SOURCES+=freebsd/c.cpp
else
    mylib_la_SOURCES+=linux/c.cpp
endif

当我运行automake时,它失败了这种消息:

Makefile.am: object `c.lo' created by `linux/c.cpp' and `freebsd/c.cpp'

有关如何配置automake以尊重此条件的任何想法,即使在Makefile.in构建过程中也是如此?

如果文件有不同的名称,我这是有效的,但它是c ++代码,我试图保持文件名与类名相同.

提前致谢!

automake autoconf libtool

5
推荐指数
2
解决办法
2039
查看次数

在automake中的头部依赖性

我想创建一个Makefile.am文件,生成文件中提到的一个头xxx.c文件.

假设xxx.c包含:

#include <version.h>
...
Run Code Online (Sandbox Code Playgroud)

并且我有一条规则在最后创建它Makefile.am:

version.h:
       echo '#define VERSION "'`hg id`'"' > version.h.tmp
       cmp version.h.tmp version.h || mv version.h.tmp version.h
Run Code Online (Sandbox Code Playgroud)

我需要更改以使xxx.c编译依赖于version.h什么?我试过了nodist_progname_SOURCES=version.h,但似乎没有这样做.

automake dependencies header-files

5
推荐指数
1
解决办法
2485
查看次数

为什么automake无法生成Makefile.in

尝试使用automake/autoconf(分别为1.10和2.61版本).一切都运行正常,除了automake没有生成Makefile.in.

产生了一些警告,但我认为它们并不重要.然而,最后一行让我觉得它产生的东西应该不会停在那里.项目中有一个md5.cc和md5.c文件.

xanadu:fsd wwilliam$ automake --add-missing
configure.ac:46: warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
/var/tmp/autoconf/autoconf-15~193/SRC/autoconf/lib/autoconf/specific.m4:421: AC_USE_SYSTEM_EXTENSIONS is expanded from...
/var/tmp/autoconf/autoconf-15~193/SRC/autoconf/lib/autoconf/functions.m4:1677: AC_FUNC_STRNLEN is expanded from...
configure.ac:46: the top level
configure.ac:46: warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
configure.ac:46: warning: AC_COMPILE_IFELSE was called before AC_GNU_SOURCE
/var/tmp/autoconf/autoconf-15~193/SRC/autoconf/lib/autoconf/specific.m4:340: AC_GNU_SOURCE is expanded from...
configure.ac:46: warning: AC_RUN_IFELSE was called before AC_GNU_SOURCE
configure.ac:46: warning: AC_COMPILE_IFELSE was called before AC_AIX
/var/tmp/autoconf/autoconf-15~193/SRC/autoconf/lib/autoconf/specific.m4:455: AC_AIX is expanded from...
configure.ac:46: warning: AC_RUN_IFELSE was called before AC_AIX
configure.ac:46: warning: AC_COMPILE_IFELSE was called before AC_MINIX
/var/tmp/autoconf/autoconf-15~193/SRC/autoconf/lib/autoconf/specific.m4:474: …
Run Code Online (Sandbox Code Playgroud)

automake autoconf makefile

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

使用automake安装配置文件和日志文件

假设我有一个这样的项目:

(dev dir)
- README
- INSTALL
/ src
  - blah.cpp
  - blah.hpp
/ conf
  - blah_one.xml
  - blah_two.xml
Run Code Online (Sandbox Code Playgroud)

我创建了一个configure.ac和Makefile.am来在(/ usr/local)/ bin下安装二进制文件.configure.ac是这样的:

AC_INIT([blah], [0.1])
AC_PREREQ([2.67])
AM_INIT_AUTOMAKE([1.11])
AC_CONFIG_SRCDIR([src/blah.cpp])
AC_PROG_CXX
AC_LANG([C++])
AC_HEADER_STDC
AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([src/Makefile])
AC_OUTPUT
Run Code Online (Sandbox Code Playgroud)

...... Makefile就像

SUBDIRS = src
Run Code Online (Sandbox Code Playgroud)

...和src/Makefile.am类似

bin_PROGRAMS = blah
blah_SOURCES = blah.cpp blah.hpp
Run Code Online (Sandbox Code Playgroud)

一切正常,"make install"正确安装(/ usr/local)/ bin下的二进制文件.

现在:

我想扩展这些命令"make install"(在configure,build之后),在/ etc/blah下安装配置文件blah_one.xml和blah_two.xml,并在/ var/log下"准备"一个日志目录/废话/

这样做的正确方法是什么?

automake

5
推荐指数
1
解决办法
5347
查看次数

有没有办法告诉automake不要解释部分的automakefile?

有没有办法告诉automake不要解释部分Makefile.am?

具体来说,我试图在Makefile.am中编码Makefile条件.正如其他人注意到的那样,这不起作用,因为automake解释了endif结构.

有没有办法逃脱或引用Makefile.am文件中的字符串,以便automake逐字复制到目标Makefile?具体来说,我不希望它在以下内容中解释endif:

ifeq "$(SOMEVAR)" ""
SOMEVAR="default_value"
endif
Run Code Online (Sandbox Code Playgroud)

automake makefile gnu-make

5
推荐指数
1
解决办法
994
查看次数

如何在automake中声明可选目标?

在我的Makefile.am文件中,我有这样的事情:

bin_PROGRAMS = foo bar

foo_SOURCES = foo.cpp

bar_SOURCES = bar.cpp
Run Code Online (Sandbox Code Playgroud)

我有兴趣bar只在我做的make bar时候编译,而不是在我做的时候make all.但我想要foo总是编译.我怎么做?

谢谢.

automake

5
推荐指数
1
解决办法
750
查看次数

Automake AM_LDADD解决方法

我想将相同的LDADD属性(单元测试库)设置为大量目标(单元测试C ++文件)。我首先尽管可能是automake具有AM_LDADD变量来将该库添加到文件中的所有目标,但事实并非如此。在一些邮件列表中,我发现了一些简短的讨论,要求添加它:http : //gnu-automake.7480.n7.nabble.com/AM-LIBS-AM-LDADD-td3698.html

我的问题是,您如何处理?有什么方法可以避免手动将LDADD属性添加到每个目标?

到目前为止,我的Makefile.am看起来像:

 test1_SOURCES = ...
 test1_LDADD = -llibrary 
  ...
  ...
 test20_SOURCES = ...
 test20_LDADD = -llibrary 
Run Code Online (Sandbox Code Playgroud)

c++ automake unit-testing makefile autotools

5
推荐指数
1
解决办法
1205
查看次数

automake:自动运行单元测试

我正在维护一个autoconf软件包,并希望集成自动测试.我使用Boost Unit Test Framework我的单元测试,并能够成功地将其集成到包中.

也就是说它可以通过编译make check,但是没有运行(尽管我读过它们make check都编译并运行测试).结果,我必须在构建繁琐的测试后手动运行它.

Makefile.am 在test文件夹中看起来像这样:

check_PROGRAMS = prog_test
prog_test_SOURCES = test_main.cpp ../src/class1.cpp class1_test.cpp class2.cpp ../src/class2_test.cpp ../src/class3.cpp ../src/class4.cpp
prog_test_LDADD = $(BOOST_FILESYSTEM_LIB) $(BOOST_SYSTEM_LIB) $(BOOST_UNIT_TEST_FRAMEWORK_LIB)
Run Code Online (Sandbox Code Playgroud)

Makefile.am 在根文件夹中:

SUBDIRS = src test
dist_doc_DATA = README
ACLOCAL_AMFLAGS = ${ACLOCAL_FLAGS} -I m4
Run Code Online (Sandbox Code Playgroud)

运行test/prog产生输出:

Running 4 test cases...

*** No errors detected
Run Code Online (Sandbox Code Playgroud)

(我不认为你需要我的测试用例的内容才能回答我的问题,所以我现在省略了它们)

那么我怎样才能automake在每次跑步时运行我的测试make check

automake autoconf unit-testing makefile boost-unit-test-framework

5
推荐指数
1
解决办法
3278
查看次数

在x86_64 linux机器上编译gentoo-bionic

您可能知道,Bionic是Google用来运行Android应用程序的C库.有人在Linux机器上进行编译,因此可以在Android之外轻松使用.这是最近一次努力的代码,最初称为Gentoo-bionic.原始项目是基于Gentoo的,但目前的来源不是Gentoo特有的.我正在使用Ubuntu.这是代码:

https://github.com/gentoobionic/bionic

这是关于ELC2013的介绍:

我试图在X86_64 Ubuntu上编译它,但失败了.我试过了:

./autogen.sh
./configure
Run Code Online (Sandbox Code Playgroud)

我有:

configure: error: unsupported host cpu x86_64
Run Code Online (Sandbox Code Playgroud)

所以我尝试过:

./configure --build=arm-linux --target=arm-linux --host=arm-linux
Run Code Online (Sandbox Code Playgroud)

配置很好,但我得到:

$ make
make: *** No rule to make target `libc/arch-x86/include/machine/cpu-features.h',
    needed by `all-am'.  Stop.
Run Code Online (Sandbox Code Playgroud)

是否有人可以建议解决方法?

ubuntu automake android compilation bionic

5
推荐指数
1
解决办法
544
查看次数