최종 출력이 정적 라이브러리 인 프로젝트를 빌드하고 CMake 기반 빌드 시스템은 Src와 Tests라는 두 개의 서브 디렉토리로 구성됩니다. 테스트 용 빌드는 실행 파일을 생성하고 src에서 빌드 된 라이브러리에 링크합니다.CMake로 아직 빌드되지 않은 라이브러리에 연결
제 문제는 오류없이 진행하려면 테스트 빌드에서 라이브러리가 이미 있어야한다는 것입니다. CMake가 테스트를 빌드 할 때 라이브러리가 존재한다는 것을 이해할 수있는 방법이 있습니까? 아니면 별도의 단계로 라이브러리를 수행해야합니까?
내 CMakeLists.txt 파일을 다음과 같이
루트 파일 :
cmake_minimum_required(VERSION 2.8)
project(mylib)
add_subdirectory(Src)
add_subdirectory(Tests)
의 Src 파일 :
는file(GLOB MYLIB_SOURCES *.cpp)
add_library(mylib ${MYLIB_SOURCES})
테스트 파일 :
file(GLOB MYLIB_TESTS *.cpp)
add_executable(tests ${MYLIB_TESTS})
find_package(GTest REQUIRED)
find_library(LIB_MYLIB NAMES mylib PATHS "${CMAKE_SOURCE_DIR}/Build/Src")
include_directories(../Src)
include_directories(${GTEST_INCLUDE_DIRECTORIES})
target_link_libraries(tests ${LIB_MYLIB} ${GTEST_LIBRARIES} pthread)
왜 mylib에 대해 명시적인 find_library가 필요합니까? 추가 요구 사항이 없으면 필요하지 않습니다. 아마 target_link_libraries (mylib 테스트)를 직접 지정할 수 있습니다. 그런 식으로 CMake는 테스트가 mylib에 달려 있다는 것을 알게 될 것이고 mylib가 테스트 빌드를 시작하기 전에 만들어 졌는지 확인할 것입니다. –
병렬 디렉토리에서 mylib를 찾을 수 있습니까? 난 단지 그것을 Src에서 정의하고 테스트 빌드 파일은 그것에 대해 모른다. 그게 문제가 될까요? –
그러나 부모 CMakeLists는 add_subdirectory를 통해 두 대상을 모두 알고 있습니다. 물론 루트 파일에서만 cmake를 호출해야하며 테스트에서는 별도로 호출하면 안됩니다. 내 의견을 반영하기위한 답을 만들 것입니다. –