이 답변은 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
발전기로 제한된다는 것입니다.
나는 왜 당신이 object-file을 원하는지 궁금하다. CMake로 정적 라이브러리를 빌드 할 수 있습니까? 필요한 경우 하나의 소스 파일에서만 정적 라이브러리를 사용할 수 있습니까? 또는 어쨌든 실행 파일을 링크하고 생성 된 객체 파일을 "재사용"할 수 있습니다. –
@Andre 하나의 장점은 프로젝트의 다른 곳에서도 컴파일 오류가 있다는 것을 알았을 때 단일 파일에 대한 컴파일 오류를 수정하는 것입니다 (예를 들어,'CMakeLists.txt' 파일을 편집 할 필요없이 다른 개발자와 일반 소비가 준비되지 않은 코드로 긴밀하게 작업하는 경우). –