如何在C/C++中声明所编写的代码要在HP-UX或Solaris或AIX中构建?在C/C++中声明Unix风格
回答
我发现,一个好办法算出这个国王的问题,就是,至少与海湾合作委员会,有这个Makefile:
defs:
g++ -E -dM - < /dev/null
那么,:
$ make defs
应该
输出的所有你有可用的定义。
所以:
$ make defs | grep -i AIX
$ make defs | grep -i HP
应该给你答案。对于Linux示例:
$ make defs | grep -i LINUX
#define __linux 1
#define __linux__ 1
#define __gnu_linux__ 1
#define linux 1
一旦你找到了定义你所寻找的,你在你的代码的开头键入:
#if !(defined(HP_DEFINE) || defined(AIX_DEFINE) || defined(SOLARIS_DEFINE))
# error This file cannot be compiled for your plateform
#endif
宏如何传递给编译器?
i.e. gcc -Dmacro[=defn]
然后测试您的代码中宏与#if
简单#ifdef
(如果你给它的值)。您的目标平台可能已经有预定义的宏。
[编辑:把一些在这里我的答案我的意见解释-D
工作原理]
-Dmacro[=defn]
编译器在命令行上是相同的代码有#define macro defn
。您将其展开为:-Dfoo=bar
相当于#define foo bar
。此外,该定义是可选的,所以-Dfoo
相当于#define foo
。
要小心你如何处理这个问题。您应该根据功能(而不是O/S)确定要使用的操作系统的功能,并相应地编写代码。然后,在一个标题中,您可以确定要编译的操作系统上有哪些功能可用。这是autoconf使用的技术,即使你不使用autoconf本身,它支持的技术也比基于平台的技术更好。请记住,在一个操作系统上发现的功能通常会迁移并在其他操作系统上使用,因此,如果您按功能工作,则与仅完成操作系统相比,您可以更轻松地适应未来。
您还必须适当编写代码,并且可移植。尽可能将独立文件中的操作系统依赖关系隔离起来,并编写一个抽象的操作系统接口来执行您所需的操作。极端的情况下,你最终得到一个Java JVM;你不需要走得太远,但你可以避免大部分的问题。
查看便携式库,如Apache便携式运行时(APR)库。
而写的线沿线的代码:
#ifdef HAVE_PWRITE
...code using pread() and pwrite()...
#else
...code using plain old read() and write()...
#endif
这是一个严重过度简化的例子 - 有可能是一个数回退的,你使用纯阅读前()和write()。不过,这是最便携的代码中使用的概念 - 例如GCC和Apache等。
也许不那么复杂的解决方案,其中有些建议是咨询Pre-defined C/C++ Compiler Macros。该站点为大量编译器/操作系统/体系结构组合提供了大量编译器宏。
- 1. JavaScript函数声明风格
- 2. 围绕风格的IF声明
- 3. 风格在一个CSS声明中div的公用组
- 4. 如何在风格中声明绑定和转换器
- 5. 如何在Python中声明变量类型,C风格
- 6. 在Slick中声明表格
- 7. (Adobe Acrobat CC)如果在计算中的声明不起作用
- 8. Unix风格的密码readline
- 9. Python风格:格式化多个冗长的类声明
- 10. 如何在声明式风格的程序?
- 11. 角度js控制器中的函数声明风格
- 12. C++风格约定:类声明中的参数名称
- 13. 如何声明中的Z手风琴
- 14. WooComerce的风格回声
- 15. 如何在nodejs中声明html表格
- 16. 在C++中get/set方法变量的方法声明的编程风格?
- 17. 在声明中
- 18. C风格的声明,斯威夫特3
- 19. C风格的声明将被折旧为我循环
- 20. 这两种声明风格之间有什么区别/优点
- 21. 声明式风格的入门者问题SQLAlchemy关系()
- 22. 在unix开发工具链中查找声明
- 23. 带AWS lambdas的Unix风格管道?
- 24. UIStatusBar半透明风格
- 25. 覆盖不透明风格
- 26. Qt风格 - 透明边框
- 27. 将C++方法声明从.hh移动到.cc文件
- 28. 在C中生成Unix风格的MD5密码哈希#
- 29. UNIX cc可执行文件位置
- 30. 在局部变量声明语句中,在块声明中,声明语句的哪个部分是声明符?
这是我一直在寻找:)谢谢 – Vijay 2009-12-18 17:00:17
整洁----------答案 – KeatsPeeks 2009-12-18 17:18:31
非常酷 - 尼斯今天新学的东西。应该指出的是,并非所有目标系统(即嵌入式系统)都具有用于gcc的自定义预定义宏。特别是如果你只是使用通用的CPU特定的gcc版本(以处理器而不是系统为目标)来生成代码。在这种情况下,您需要使用-D选项创建自己的预定义宏。 – Adisak 2009-12-18 17:28:07