2011-03-08 1 views
0

일부 TCP 서버에 크로스 플랫폼 라이브러리를 사용하여 라이브 비디오 스트리밍을위한 간단한 콘솔 응용 프로그램 프로젝트가 있습니다. Windows에서 수동으로 Linux 및 Mac OS X로 이식했습니다. 이제는 수동으로 생성하고 테스트 한 동일한 코드를 사용하는 3 개의 프로젝트가 있습니다. 이제 프로젝트 파일을 업데이트하는 프로세스를 자동화하기 위해 미리 만든 루아 프로젝트 생성 파일을 만들려고합니다. Premake 프로젝트 빌드/설정 스크립트 : 사용자가 libs (libdirs) 및 include (includedirs)를 사용하여 경로의 배열에 자신의 경로를 추가하는 방법은 무엇입니까?

나는 내 프로젝트에 필요한 lib 디렉토리 링크의 배열을 가지고 내 premake 루아 빌드 파일에서 내가 lib 디렉토리 링크의 배열을 가지고 루아 파일

를 작성하기 시작했다.

일부는 반복하지 않습니다. 예를 들어 Windows에서는 "openal32"(Windows 7 64 비트 버전)와 Linux에서 "openal"이라는 훨씬 간단한 이름이 있기 때문에 "OpenAL.framework" 맥 OS X (과를 OpenAL을 포함 맥 OS에서의 유일한 옵션)

을에 나는 linkdirs 속성 집합이 - 아마 맥 OS X에 대한 작동합니다 DIRS로 연결되는 모든 시스템

libdirs { 
"/opt/local/lib", 
"/System/Libarary/Frameworks", 
"/Library/Frameworks", 
"/usr/lib", 
"/usr/local/lib" } 

하나 (왜냐하면 우리는 기본적으로 /opt/local/lib에 설치되는 Mac 포트를 사용하기 때문입니다) 그리고 리눅스 (우리는 대부분 자동으로 설치되는 app-get 아날로그를 사용합니다)는 usr/lib, 때로는 /usr/local/lib). 하지만 창문에서는 ffmpeg가 어디에 있는지, 어디서 부스트를 설치했는지 알지 못합니다 (아마도 각 프로그래머는 윈도우 Libs와 Headers를 어디에 보관할 것인지 생각하고 있습니다 ...). 그래서 우리는 premake에서 간단한 것을 필요로합니다 :

includedirs 배열에 대해 libdirs 배열 및 동일한 것으로 포함될 사용자 정의 라이브러리 디렉토리. 그것은 하나 이상의 디렉토리를 추가 할 수있는 ba입니다.

어떻게 사용할 수 있습니까? 내가 무엇을해야 ...

나는

newoption { 
trigger = "libsPath", 
value = "PATH", 
description = "Choose a particular directory for general libs search" 
} 
if not _OPTIONS["libsPath"] then 
_OPTIONS["libsPath"] = NULL 
end 

libdirs { 
"/opt/local/lib", 
"/System/Libarary/Frameworks", 
"/Library/Frameworks", 
"/usr/lib", 
"/usr/local/lib", 
_OPTIONS["libsPath"] 
} 

같은 "옵션 기반 시스템"을 만들려고하지만, 윈도우에서 작동하지 않는 것 같습니다?

답변

4

이 조금 필요가 없습니다

if not _OPTIONS["libsPath"] then 
    _OPTIONS["libsPath"] = NULL 
end 

그것은 이미 nil이 될 것입니다 (루아에서 NULL에 해당)을이 설정되지 않은 경우. 그렇지 않으면, 이것은 좋아 보이는데 나를 위해 잘 작동합니다.

한 가지 가능한 개선 사항 : 경로가 구분 된 목록을 허용하도록 인수를 변환하여 사용자가 필요한 경우 둘 이상을 제공 할 수 있습니다. 당신이 세미콜론으로 구분 된 경로와 같은 스크립트를 호출한다면 :

-- Split it up 
libdirs { string.explode(_OPTIONS["libsPath"], ";") } 

테스트되지 않은,하지만 작동합니다 :

C:\> premake4 /libsPath=C:\Code\Libs;C:\Code\MoreLibs vs2010 

당신은 이런 식으로 라이브러리 검색 경로를 추가합니다. 희망이 도움이됩니다!

0

사용자가 포함 또는 라이브러리 디렉토리를 지정할 수있게하려면 가장 쉬운 방법 중 하나는 환경 변수를 사용하는 것입니다. 스크립트가 실행되면 EXTRA_LIB_PATHSEXTRA_INCLUDE_PATHS (또는 원하는 경로) 환경 변수를 찾고 여기에 나열된 경로를 언급 한 사전 정의 된 경로 목록에 추가 할 수 있습니다.

Windows, Linux 및 OSX에는 모두 환경 변수 개념이 있지만 정확히 동일한 형식을 사용하지는 않습니다. Windows 환경 변수의 디렉토리 경로 목록은 일반적으로 Linux가 콜론을 사용하는 세미콜론으로 구분됩니다. 환경 변수를 파싱하는 코드가 현재 플랫폼을 감지하고 적절한 방법을 사용하여 데이터를 추출 할 수 있는지 확인해야합니다.

또 다른 가능성은 (예 : premake.lua -L/path/to/lib -I/my/include/path -L/another/lib/path 등의 구문을 사용하여) 프리 케이크 스크립트의 명령 줄 옵션으로 디렉토리 경로를 전달하는 것입니다. 단점은 명령 줄이 오래 걸릴 수 있으며 일부 콘솔에는 CLI 명령의 길이에 제한이있을 수 있다는 것입니다. 몇 가지 추가 경로 이상을 사용하는 경우 CLI 인수를 통해 환경 변수를 사용하는 것이 좋습니다.