2009-09-07 2 views
16

나는이처럼 보이는 CMakeLists.txt 파일이 :cmake로 오브젝트 파일을 한 번만 빌드하는 방법은 무엇입니까?

add_executable(exec1 exec1.c source1.c source2.c source3.c) 
add_executable(exec2 exec2.c source1.c source2.c source3.c) 
add_executable(exec3 exec3.c source1.c source2.c source3.c) 

source1.o source2.o source3.o 파일을 구축 할 수있는 정말 시간이 오래 걸릴, 그들은 모든 실행 파일에 공통이기 때문에, 나는 그들 각각이 한 번만 건설되기를 바란다. 그러나 cmake의 현재 동작은 각 exec 대상에 대해 개별적으로 다시 작성하는 것으로 불필요한 중복 작업입니다.

cmake에게 오브젝트 파일을 한 번만 빌드하도록 지시하는 방법이 있습니까? 소스 파일은 다른 컴파일러 옵션으로 컴파일 할 수 있기 때문에이 어려울 것

답변

15

번호는 당신이 할 수있는 일

정적 라이브러리로 오브젝트 파일을 넣어하는 등, 후 단계 구축하고, 달성하기 위해 대신에 링크 :

add_library(mylib STATIC source1.c source2.c) 
add_executable(myexe source3.c) 
target_link_libraries(myexe mylib) 

편집을하십시오 뿐만 아니라 공유 라이브러리에 물론, 당신은 그것을 넣을 수 있습니다.

+3

이러한 접근 방식에주의하십시오. 관련된 많은 exes가있는 경우 공유 라이브러리가 더 친숙 할 수 있습니다. http://blog.flameeyes.eu/2008/01/21/what-to-do-with-shared-code – richq

+2

물론입니다. 나는 방금 OP가 각각의 실행 파일에 코드를 복사하기를 원한다고 생각했다. – JesperE

12

예, CMake 2.8.8에서는 실제 정적 또는 공유 라이브러리와 동일한 조직 및 종속성 속성을 갖고 있지만 디스크에 파일을 생성하지 않는 가상 라이브러리의 일종 인 객체 라이브러리를 사용할 수 있습니다. CMake 튜토리얼 : Object Library을 참조하십시오.

관련 문제