2010-12-29 6 views
1

우리 저장소에 일부 종속 라이브러리가 있습니다. 주요 부분은 cmake로 빌드됩니다. 이제 cmake-makefile은 cmake 빌드 시스템이없는 종속성 라이브러리를 빌드해야합니다. 특정 라이브러리에는 "Makefile.squirrel"이 사용되어야합니다. 해당 라이브러리에 대한 cmakelists.txt :CMake & ExternalProject : 특정 파일을 찾지 못했습니다.

[ 93%] Performing build step for 'squirrel,' 
/bin/sh: make -f /home/enrico/projekte/projectname/dependencies/SQUIRREL2/Makefile.squirrel: not found 
make[2]: *** [dependencies/SQUIRREL2/squirrel,-prefix/src/squirrel,-stamp/squirrel,-build] Error 127 
make[1]: *** [dependencies/SQUIRREL2/CMakeFiles/squirrel,.dir/all] Error 2 
make: *** [all] Error 2 

LS -la /홈/엔리코/projekte/프로젝트 이름/의존성에 : make를 실행하면

cmake_minimum_required (VERSION 2.8) 

include(ExternalProject) 

ExternalProject_Add(squirrel, 
    SOURCE_DIR "./" 
    UPDATE_COMMAND "" 
    BUILD_IN_SOURCE 1 
    CONFIGURE_COMMAND "" 
    BUILD_COMMAND "make -f ${CMAKE_CURRENT_SOURCE_DIR}/Makefile.squirrel" 
    INSTALL_COMMAND "" 
    ) 

는 그러나, 나는 오류 메시지가 /SQUIRREL2/Makefile.squirrel은 파일이 있음을 보여줍니다.

파일 경로 하드 코딩 (솔루션 옵션이 아님)도 작동하지 않습니다.

어떤 아이디어 나 힌트가 있습니까?

감사합니다, 엔리코

답변

0

당신은 올바른 메이크로 만들어 호출하는 스크립트를 작성 시도 할 수 있습니다. CMAKE_CURRENT_SOURCE_DIR을 스크립트가 읽는 환경 변수로 내보내십시오.

+0

나는 몇 시간 후에 아주 똑같은 생각을했다. BUILD_COMMAND가 호출하는 별도의 쉘 스크립트를 만들었습니다. 지금은 작동하지만 해킹처럼 느껴집니다. 나머지 종속성에 대해서는 그 이상이 필요합니다 ... – Enrico

3

세 가지 관찰 :

1) 프로젝트의 이름으로 "다람쥐"를 사용하고 있습니다. CMake 함수의 인수는 공백으로 구분되므로 쉼표는 사용자가 지정한 이름의 일부입니다. (아마 당신이 원하지 않을 것.)

2) 당신은 사용해야

SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" 

오히려

SOURCE_DIR "./" 

보다가 "./"어쨌든 그 전체 경로 이름 단순히 상대이기 때문입니다.

BUILD_COMMAND "make -f ${CMAKE_CURRENT_SOURCE_DIR}/Makefile.squirrel" 

가 읽어야합니다 :

BUILD_COMMAND make -f ${CMAKE_CURRENT_SOURCE_DIR}/Makefile.squirrel 

당신이 거기에 따옴표가있는 경우, 다음 쉘이 실제를 찾고

3) 문제의 실제 소스는 BUILD_COMMAND 값입니다 파일은 "make -f .../Makefile.squirrel"이라는 이름을 붙입니다. 왜냐하면 CMake는 인수를 공백으로 구문 분석하기 때문입니다. 그러나 큰 따옴표는 CMake에게 "이것이 정확히 공백을 포함하는 하나의 인수입니다 ..."라고 말합니다. $의 확장 된 값에 공백이 있으면 {CMAKE_CURRENT_SOURCE_DIR} 그러면 CMake는 올바르게 인용 부호를 붙이거나 (escape, dependin 생성 된 makefile에서 명령을 생성 할 때 플랫폼/셸에서 g를 사용합니다.

관련 문제