2011-01-22 2 views
9

CMake를 사용하여 객체 파일을 만들려고하고 있지만 CMake가 완전한 실행 파일이 아닌 다른 것을 만들 수없는 것 같습니다. 나는 대상의 OUTPUT_NAME 속성을 변경하려고했습니다CMake 빌드 대상에서 오브젝트 파일 (* .o) 만 생성하려면 어떻게합니까?

$(CC) $(CFLAGS) $(INC_DIRS) -c src/object.c 

,하지만 '케이 : 나는 기본적으로 (그 결과가 VxWorks를 대상에로드 및 연결됩니다) 다음 컴파일의 결과를 찾고 있어요 어느 쪽도 도움이되는 것 같습니다.

사용자 지정 명령을 사용하여이 문제를 해결할 수 있다고 생각하지만 CMake가 제공하는 멋진 작업을 수행하고있는 것처럼 보입니다.

도움 주셔서 감사합니다.

+0

나는 왜 당신이 object-file을 원하는지 궁금하다. CMake로 정적 라이브러리를 빌드 할 수 있습니까? 필요한 경우 하나의 소스 파일에서만 정적 라이브러리를 사용할 수 있습니까? 또는 어쨌든 실행 파일을 링크하고 생성 된 객체 파일을 "재사용"할 수 있습니다. –

+0

@Andre 하나의 장점은 프로젝트의 다른 곳에서도 컴파일 오류가 있다는 것을 알았을 때 단일 파일에 대한 컴파일 오류를 수정하는 것입니다 (예를 들어,'CMakeLists.txt' 파일을 편집 할 필요없이 다른 개발자와 일반 소비가 준비되지 않은 코드로 긴밀하게 작업하는 경우). –

답변

1

사용자 지정 명령 경로로 이동합니다. GENERATED 및 EXTERNAL_OBJECT 소스 파일 등록 정보를 설정하면 CMake 후자로 컴파일 할 때 해당 오브젝트 파일을 계속 사용할 수 있습니다.

4

이 답변은 CMake mailing list 나에게 주어진 그것은 마법처럼 일 다음 ${CMAKE_SOURCE_DIR}/cpo 스크립트에서

: 이제

#!/bin/sh 
d=$1; shift 
while [ "$1" != "--" ]; do 
    cp $1 $d/$(basename $1); shift 
done 

, 다음 CMakeLists.txt보고 :

CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR) 
PROJECT(CPO C) 
FILE(WRITE ${CMAKE_BINARY_DIR}/f.c "void f(void){}\n") 
ADD_LIBRARY(f SHARED f.c) 
SET_TARGET_PROPERTIES(f PROPERTIES RULE_LAUNCH_LINK 
    "${CMAKE_SOURCE_DIR}/cpo ${CMAKE_BINARY_DIR} <OBJECTS> --" 
) 

시작 스크립트 "cpo"는 대상 "f"가 객체 파일을 생성하도록 디렉토리를 첫 번째 파로서 전달합니다 도서관 대신에 ameter; 그 밖의 모든 업무는 평소와 같이해야합니다. 중요한 것은 <OBJECTS> 자리 표시 자에 대한 스크립트의 액세스이므로 객체 파일에서 작동 할 수 있지만 "-"다음의 실제 링크 명령은 무시됩니다. 그 방법, 당신은 컴파일하기 전에 CMake의 모든 기능을 사용할 수 있으며 바로 연결하기 전에 요격이 발생합니다. IMO, 그것은 당신의 요구에 쉽게 적응할 수있는 매우 깨끗한 솔루션입니다; 단점 은 RULE_LAUNCH_LINK의 사용이 Makefile 발전기로 제한된다는 것입니다.

관련 문제