我想让Makefile能够在Linux和Solaris中编译。 我知道如何单独做到这一点,但我怎样才能将两者结合起来,并且能够检测到我正在使用的是哪种操作系统? 我正在试图做一个简单的C文件 - 但它是编译器的名称更改。如何在Linux和Solaris中编译C?
2
A
回答
5
GNU Autoconf被设计来解决这个问题很:
的Autoconf是产生shell脚本 自动配置软件 源代码包 M4宏的扩展包。这些脚本 可以将这些软件包适应类UNIX系统的多种类型 ,而无需用户干预手动 。 Autoconf从模板文件为 包创建 配置脚本,该模板文件列出 包可使用的操作系统功能,格式为M4 宏调用。
我已经使用Autoconf自己做了几个简单的项目。你可以看看源代码,看看如何使用autoconf简单的功能检测:
注意的Autoconf的目的不是为了检测操作系统。相反,它旨在检测操作系统上可能存在或不存在的功能,设置等。
想到问这个问题:“在此平台上调用的C编译器是什么?”不是“我在Linux或Solaris上运行吗?”
0
我相信大多数人会说使用一些奇特的autotools的东西。他们当然是对的。
但是......你可以在你的makefile文件中加入如下内容。
OS = `uname -s`
ifeq ($(OS),Linux)
...
endif
ifeq ($(OS),Sun)
...
endif
+1
我已经看到了这种方法导致的痛苦。想象一下你想在这个系统下支持一个新的操作系统,你必须通过并手动扩展你的Makefile逻辑来应付......你必须记住哪个操作系统支持哪些功能,并且希望它们永不改变。用这种方法维护了一个大型的应用程序,这真是一场噩梦,Autoconf很难学,但是值得付出努力。检测功能,而不是操作系统! –
相关问题
- 1. 的Linux VS的Solaris - 编译软件
- 2. 如何在基于Debian的linux中编译和运行C/C++?
- 3. 在Linux中编译C++
- 4. 在eclipse中编译linux C++
- 5. 在Linux中编译C++
- 6. 如何在使用cc的Solaris中编译C++?
- 7. 如何在Linux中使用-wall和-werror并编译c文件
- 8. 如何链接和编译Linux中的.c和.so文件
- 9. C++编译和运行在Linux上
- 10. 在Solaris上编译LAPACK
- 11. Linux下C:编译
- 12. 如何在C++中编译编译器?
- 13. 如何编译多个.c和.h文件在GCC Linux呢?
- 14. 在windows和linux上编译
- 15. 如何在linux中交叉编译
- 16. 如何在Bochs的DLX linux中编译C程序
- 17. 如何编译c/cpp代码,以便在linux中编译后提供预处理汇编和对象文件?
- 18. Linux C++编译错误
- 19. 如何编译linux桥?
- 20. 在Solaris,Linux,Windows和Mac上清除C中的屏幕
- 21. 模块化编程和编译linux中的C程序
- 22. 代码注入 - Solaris和Linux
- 23. 如何在C中编译C程序?
- 24. 编译C++代码以在Windows和Linux中表现相同
- 25. 在Windows和Linux中写入C会导致编译问题吗?
- 26. 如何在Linux中编译和运行OpenNI的java文件
- 27. 如何在Linux中编译apache,mysql和php
- 28. 如何在linux中编译几个java类和文本文件
- 29. 在Solaris上编译ruby 1.9.3时出错
- 30. 在Solaris上为jython 2.5编译Mysqldb
您确定需要吗?你是否都在使用gcc? – Foon
@Foon我只知道要在Linux中编译我做gcc或g ++,而在Solaris中我需要cc。或者我错了吗? – drum
在Linux上有一个'cc'(或者'c99',或者'c89',如果你是老式的),它就是连接到'gcc'的地方。默认的编译器在每个平台上通过内置在“make”中的默认规则正确选择的可能性很大。 –