2011-02-08 4 views
2

몇 가지 (비슷한) 플랫폼에서 컴파일 시스템을 일반화하고 싶습니다. 쉘 스크립트 또는 Makefile이 실행중인 호스트 유형을 결정하는 좋은 방법은 무엇입니까? 나는 맥과 리눅스를 구별하고 싶다. 리눅스의 다른 특정 배포판 (예, RHEL, Ubuntu). Cygwin은 저에게 중요하지 않습니다. 그러나 응답에 포함 시키면 다른 사람들이 그 가치를 발견하게 될 것이라고 확신합니다.Linux/Mac : 컴파일 타임에 플랫폼을 결정하는 좋은 방법은 무엇입니까?

소스 유형을 컴파일하는 것보다 호스트 유형을 사용하여 올바른 버전의 바이너리 패키지를 가져 와서 설치하는 것이 더 편리 할 수 ​​있습니다. 또한 일부 상용 소프트웨어는 특정 배포판에 대해 바이너리 패키지로 제공되기 때문에 올바른 바이너리를 얻는 것이 동기 부여의 일부입니다.

감사합니다,

setjmp는

+0

사용중인 배포판을 알아야하는 경우 접근 방식에 문제가 있습니다. – user562374

+0

@ user562374 일부 소프트웨어는 특정 배포판 용으로 상업용 또는 패키지로 제공됩니다.또한 – SetJmp

+0

@ user562374 일부 소프트웨어는 특정 배포판 용으로 상용 및/또는 패키지로 제공됩니다. 또한 소스 기반 패키지의 경우 "컴파일 한 번"접근법을 사용하고 모든 곳에서 rsync를 수행 할 수 있습니다. 올바른 바이너리 패키지의 "풀 (pull)"을 자동화하기 위해서는 어떤 변형을 가져올 지 결정해야합니다. (예 : RHEL 대 Ubuntu). 링크는 – SetJmp

답변

2

끝나면 uname -a 주요 * 괜찬아 우분투가 될 것이다에서 가장 좋은 방법은 빨간 모자를 구별 할 것을 확신하지

변형 구별하는 방법 - 패키지 관리 도구를 찾을 수 설치된 패키지를 쿼리하여 결국 다른 데비안 파생물 등을 줄이는 데 도움이 될 것입니다.

2

리눅스 변형은 일반적으로 배포 정보를/etc/issue에 저장합니다.

대부분의 커널 구조에 버전// proc 디렉토리에

5

Autotools가이 정보를 넣어 것입니다. 그것은 당신이 이런 종류의 물건을하는 데 도움이 매크로 톤이 있습니다.

http://www.lrde.epita.fr/~adl/autotools.html

+0

+1입니다. 매우 유익한. –

+0

감사합니다. 나는 OP가 자신의 접근 방식을 바꾸고 자신이 필요로하는 것이 무엇인지, 자신이 어떤 시스템을 가지고 있는지를 찾아 자신의 시스템을 제대로 작동시킬 필요가 있다고 생각한다. – rmk

+0

Very true ...... –

1

그것은 완전히 간단하지 않습니다. uname을 사용하여 일반 매개 변수를 찾을 수 있지만 배포판을 구별하는 것이 더 힘든 작업입니다. 아마도 빌드 시스템을 일반화하기 위해 autoconf 같은 것을 사용하는 것을 고려해야합니까?

0
당신은 Qt는을 사용하고 그냥 경우

정의의이 정말 좋은 세트, Q_OS_ * 거기, 운영 체제 당신에게 그 가이드 당신은에 컴파일하고 있습니다 :

Q_OS_AIX 
Q_OS_BSD4 
Q_OS_BSDI 
Q_OS_CYGWIN 
Q_OS_DARWIN 
Q_OS_DGUX 
Q_OS_DYNIX 
Q_OS_FREEBSD 
Q_OS_HPUX 
Q_OS_HURD 
Q_OS_IRIX 
Q_OS_LINUX 
Q_OS_LYNX 
Q_OS_MAC 
Q_OS_MSDOS 
Q_OS_NETBSD 
Q_OS_OS2 
Q_OS_OPENBSD 
Q_OS_OS2EMX 
Q_OS_OSF 
... 

는 그들은 QtGlobal에 정의되어 있습니다. 컴파일러가 Q_CC_ * 또는 타겟 윈도우 시스템 Q_WS_ *를 사용하는 데 도움이되는 정의조차 있습니다.

Qt를 사용하지 않고 일반적인 방법으로 가고 싶다면 대체로 Autotools 패키지 또는 CMake으로 폴백해야합니다.

Linux 배포판을 결정하는 것은 어렵지만 힘들지 않습니다. 먼저 어떤 배포판이 좋을지 파악한 다음, 선택한 리눅스 배포판의 모든 파일/구성 검사를 this example과 같이하면됩니다. 실제로 사용할 수있는 수많은 Linux 배포판을 모두 지원할 수는 없습니다. 그만큼. :-)

Mac 측에 대해서는 Mac 전문가가 대답하도록 할 것이지만 최소한 다양성 문제는 문제가되지 않기 때문에 어렵지 않을 것입니다.

관련 문제