2014-09-19 1 views
2

일부 개체 파일을 CMake 정적 라이브러리에 추가하고 싶지만 사용자 지정 확장명이 있습니다.cmake 라이브러리에 사용자 지정 확장명을 가진 개체를 추가하려면 어떻게해야합니까?

가 여기에 내가 무엇을 시도했다입니다 :

만든
set(SRCS testfile.cxx jsobj.js) 
add_library(testlib STATIC ${SRCS}) 

은 CMake는 ar testfile.cxx.o를 호출합니다 (즉, 다른 파일을 완전히 무시된다). 아카이브에 포함하려면 어떻게해야합니까? 여기에 내가 해봤 다른 트릭은 다음과 같습니다

list(APPEND CMAKE_CXX_SOURCE_FILE_EXTENSIONS js) 
list(APPEND CMAKE_C_SOURCE_FILE_EXTENSIONS js) # no luck 

add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/jsobj.js.o 
        COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/jsobj.js 
                ${CMAKE_CURRENT_BINARY_DIR}/jsobj.js.o 
        DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/jsobj.js.o) # still no luck 

(경우에 당신이있어 관심, 나는 소스 입력으로 C/C++ 파일을 받아 들일 수 emscripten 컴파일러를 사용하고, 자바 스크립트 파일은 본질적으로 " 프리 컴파일 된 객체 "라고 부릅니다 .CMake가 명령 행에 ar 명령 줄에 추가 할 수있는 방법을 찾고 싶습니다.)

+0

문제를 해결하셨습니까? 나는 그것에 대해 정말로 관심이 있다는 해결책을 찾고있다. – GameDeveloper

+1

@DarioOO 나는 아래에서 내가 한 일에 대한 표시를 정리했다. 잘하면 그 도움이 될 것입니다. –

답변

1

기록상, 이는 내가 해커 방식으로 내 문제를 해결 한 방법입니다. 기꺼이 받아 들여진다. 나는 내 오브젝트 파일을 추가,

list(APPEND CMAKE_CXX_SOURCE_FILE_EXTENSIONS jso) 

을 다음 :

나는 CMake 이해 파일 입력 목록에 추가 한 후, "JSO"나의 특별한 미리 컴파일 된 객체에 대한 새 파일 확장자를 만들어 정적 라이브러리 타겟에 포함시키기 위해 CMake 소스에 대한 확장자 ".jso".

마지막으로 CC=mycc을 설정하여 컴파일러를 해킹했습니다. mycc은 입력에 확장자 ".jso"가 있는지 확인하는 Python 스크립트입니다. 그렇지 않은 경우 표준 컴파일러를 다시 호출하기 만합니다. 그렇지 않으면 입력을 출력으로 전혀 복사하지 않으므로 mycc -c input.jso -o output.jso.o은 파일 복사본 일뿐입니다.

이것은 꽤 아니지만 점진적 빌드의 경우 모든 종속성을 완벽하게 선택합니다. 나는 그것이 예쁜 척 할 수는 없지만, CMake가 좋아하는 방식대로 일하는 것은 효과가있는 것처럼 보입니다. 여기서 우리는 모든 입력이 실제로 이미 컴파일 되었더라도 소스 파일이라고 가장하는 것입니다.

+0

uao nice! 정말 재미있는 해킹! 감사합니다. 나는 emscripten을 위해 그것을 필요로했다. – GameDeveloper

+1

emscripten을 자동으로 생성하도록 pulls 요청을 만들었지 만, 풀 요청은 받아 들여지기 전에 그것에 몇 가지 테스트를 추가하기를 기다리고있다. 당신이 칩을 써서 도움이된다면 더 유용 할 것입니다! 적어도 내 지부에서 병합해야합니다. https://github.com/kripken/emscripten/pull/2809 –

관련 문제