我有一些编译和运行的c代码,可以从许多不同的unix计算机(各种linux和mac,偶尔是其他计算机)访问的目录中,而不同的操作系统显然需要不同的可执行文件。如何判断是否为当前机器编译了可执行文件?
我有一个简单的shell脚本调用相应的可执行文件prog.$OSTYPE.$MACHTYPE
,如果需要的话,先编译它。这非常简单(尽管它需要使用csh
才能确定$OSTYPE
和$MACHTYPE
的可靠定义),并且它几乎可行。
然而,事实证明,甚至$OSTYPE
和$MACHTYPE
是不够的:例如,编译在OSX 10.5产生一个可执行prog.darwin.i386
其中,在OSX 10.4当被调用时,立即崩溃。
是的,每次我想运行该程序时重新编译是解决此问题的一种方法,但似乎过多。我知道在每台机器上都有一个bin
目录是标准解决方案,但非root用户可能在其主目录之外没有太多的写入权限(这对所有机器都是通用的)。
所以我的问题是,有没有更好的方法?编译器(通常是gcc)显然知道它编译的是什么类型的系统 - 是否有一种很好的可移植的方法来找出我的脚本运行在哪种“系统”上,因此它可以调用正确的可执行文件,而不是一个有未定义的行为?
如果gcc不存在,'bash --version'同样会告诉你编译的目标bash是什么(并且bash通常在所有系统上存在并正确编译)。 (这可能与gcc的目标不同) – Matt 2011-04-18 01:18:19
这给出了我想要的信息,但如果它不依赖于gcc,它会更好(尽管这些天可能一切都有gcc)。即使在没有编译器的机器上(不要大笑,它是Mac上的可选安装),对于我的脚本来说,看到另一台具有相同体系结构的计算机已经生成了可执行文件(现在可以使用)这是你在这种情况下所能达到的最好结果 - 每次都比重新编译更强大)。 – Matt 2011-04-18 01:34:55