У меня есть некоторый код на c, который я компилирую и запускаю в каталоге, доступном с разных компьютеров Unix (разных Linux и Mac, иногда других), причем разным ОС, очевидно, нужны разные исполняемые файлы.
У меня есть простой сценарий оболочки, который вызывает соответствующий исполняемый файл prog.$OSTYPE.$MACHTYPE
, сначала компилируя его при необходимости. Это очень просто (хотя для надежного определения $OSTYPE
и $MACHTYPE
необходимо использовать csh
), и оно почти работает.
Однако оказывается, что даже $OSTYPE
и $MACHTYPE
недостаточно: например, компиляция в OSX 10.5 дает исполняемый файл prog.darwin.i386
, который при вызове в OSX 10.4 мгновенно завершает работу.
Да, перекомпиляция каждый раз, когда я хочу запустить программу, является одним из способов решения этой проблемы, но это кажется чрезмерным. Я знаю, что наличие каталога bin
на каждой машине является стандартным решением, но пользователь без полномочий root может не иметь большого доступа для записи за пределами своего домашнего каталога (что является общим для всех машин).
Итак, мой вопрос: есть ли лучший подход? Компилятор (часто gcc), очевидно, знает, для какой системы он компилируется - есть ли хороший переносной способ узнать, на какой «системе» работает мой сценарий, чтобы он мог вызвать правильный исполняемый файл вместо одного? с неопределенным поведением?