如何解决配置编译选项和编译器自动配置
我正在使用Rust和tcl进行个人项目,但是我仍然想使用经典的makefile结构。
我知道要编译多文件,我只需要在main.rs上声明mod second
,然后rustc自动连接模块。所以我用
$ rustc main.rs -o output -C debuginfo=2
现在我试图集成 autoconf 和 automake ,因为我想创建一个配置脚本来检查tcl,rustup等...但是我不知道如何进行编辑以使用rustc及其cc和c选项的选项进行编译(例如尝试使用由于没有主要功能而无法编译的.o)。
对于我使用的 configure.ac :
AC_CONfig_SRCDIR([source/main.rs])
AC_CONfig_AUX_DIR(config)
# I manually checked for rustup and tclsh
AM_INIT_AUTomake
AC_CONfig_FILES([Makefile])
AC_OUTPUT
Makefile.am :
AUTomake_OPTIONS = foreign
bin_PROGRAMS = output
SUBDirs = sources
output_SOURCES = sources/main.rs
我的主目录包含configure.ac和Makefile.am,sources目录包含所有内容(以及autoconf的配置目录)
解决方法
现在我试图集成 autoconf 和 automake ,因为我想创建一个配置脚本来检查tcl,rustup等...
配置脚本由Autoconf负责。没有必要将Automake与Autoconf一起使用,并且应考虑单独使用Autoconf是否明智。这样可以完全控制生成的Makefile
,因为您可以直接编写Makefile.in
而不是依靠Automake来完成。大概,您写的Makefile.in
比Automake生成的要简单得多,没关系。
Automake不一定没有问题,但是its manual has this to say关于语言支持:
Automake当前仅包含对C,C ++的完全支持(请参阅C ++ 支持),目标C(请参见目标C支持),目标C ++(请参见 目标C ++支持),Fortran 77(请参见Fortran 77支持),Fortran 9x(请参阅Fortran 9x支持)和Java(请参阅带有gcj的Java支持)。 对其他语言的基本支持 将根据用户需求进行改进。
可以通过以下方式获得对添加自己的语言的某些有限支持: 后缀规则处理(请参见后缀)。
referenced section about suffix rules显示了如何使用这样的规则教Automake如何构建Rust程序。它可能看起来像这样:
.rs:
$(RUSTC) $< -o $@ $(AM_RUSTFLAGS) $(RUSTFLAGS)
SUFFIXES = .rs
假设configure
将标识Rust编译器并将其名称导出为RUSTC
。 AM_RUSTFLAGS
用于在项目内部(通常在Makefile.am
中定义编译标志,RUSTFLAGS
用于使构建器在构建时添加或覆盖编译标志。
但是,由于编译器不会产生中间目标文件(或因此我收集),所以我希望在output_SOURCES
中定义源不会产生有效的Makefile,并且您可能需要顶部的名称级别的Rust源,以匹配所需二进制文件的名称(即output.rs
而不是main.rs
)。然后,单后缀规则应在不明确指定任何源的情况下构建二进制文件。您还希望在EXTRA_SOURCES
变量中命名 all 个贡献Rust的源,否则将通过make dist
构建的发行包中将它们省略。
还请注意,如果您要构建多文件程序,则以上内容并未定义实际存在的所有构建依赖项。我建议通过添加适当的仅前提条件规则来做到这一点,例如
output: $(output_extra_sources)
在多文件情况下为(无配方)。这将确保make
将识别出由于output
以外的其他来源之一的修改而需要重建output.rs
的时间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。