2011-01-06 3 views
4

최근 CMake를 통해 내 프로젝트 중 하나에 테스트를 추가했습니다. 필자는 테스트 케이스를 실행할 다른 실행 파일을 만들어이 작업을 수행했습니다. 내 프로젝트의 테스트 케이스는 내 메인 애플리케이션의 코드를 사용한다. 주 응용 프로그램과 테스트 러너가 공유하는 소스 파일을 변경할 때마다 해당 개체를 두 번 다시 컴파일합니다. 기본 응용 프로그램에 한 번, 테스트 러너에 두 번째로CMake로 공통 객체 파일을 재 컴파일하지 않습니까?

둘 모두에 대해 동일한 오브젝트 파일을 공유 할 수있는 방법이 있습니까?

내 CMakeLists 파일은 다음과 유사합니다.

AUX_SOURCE_DIRECTORY(${SRC_DIR}/game game_SRC) 
AUX_SOURCE_DIRECTORY(${SRC_DIR}/framework/ framework_SRC) 

ADD_EXECUTABLE(${CMAKE_PROJECT_NAME} 
       ${game_SRC} ${framework_SRC}) 

# --- Testing --- 
ENABLE_TESTING() 
AUX_SOURCE_DIRECTORY(${TEST_DIR} test_SRC) 

ADD_EXECUTABLE(${TEST_RUNNER_NAME} 
       ${test_SRC} 
       ${framework_SRC} 
) 

답변

13

예, 프레임 워크를 별도의 라이브러리로 지정하십시오. 이제는 framework_SRCS를 프로젝트 실행 파일의 소스로 지정하고 테스트 실행기 실행 파일에 대해 동일한 소스를 지정합니다. CMake는 지정된 소스에서 실행 파일을 간단히 빌드합니다.

CMake는 동일한 소스 파일이 두 실행 파일 모두에서 똑같이 사용된다고 쉽게 추측 할 수 없습니다. 테스트와 앱 사이에 몇 가지 다른 컴파일 플래그가 있다면 어떨까요?

가장 쉬운 방법은 라이브러리에 당신에게 framework_SRCS을 연결 한 다음 링크 의존성을 지정하는 것입니다.

ADD_LIBRARY(MyFramework STATIC ${framework_SRCS}) 

ADD_EXECUTABLE(${CMAKE_PROJECT_NAME} 
       ${game_SRC}) 
TARGET_LINK_LIBRARIES(${CMAKE_PROJECT_NAME} MyFramework) 

# --- Testing --- 
ENABLE_TESTING() 
AUX_SOURCE_DIRECTORY(${TEST_DIR} test_SRC) 

ADD_EXECUTABLE(${TEST_RUNNER_NAME} 
       ${test_SRC} 

TARGET_LINK_LIBRARIES(${TEST_RUNNER_NAME} MyFramework) 

(I 명시 적으로 정적 라이브러리를 구축하기로 결정합니다을 물론 당신이 그것을두고 선택할 수 최대 cmake 또는 공유 빌드 시행)

감사합니다, André

관련 문제