2015-10-20 16 views
6

Projenin repo'su kullanmak istediğim kütüphanenin kökü değilken, CMake'de dış projeleri nasıl ekleyebilirim, ancak aslında projemde kullanmak istediğim her bir kök dizin dosyası olan iki dizin var mı?Repo (googletest) birden çok kitaplığa sahip olduğunda CMake ExternalProject nasıl kullanılır?

Ben ExternalProject_Add ile google testi repo (https://github.com/google/googletest) indirmeye çalışırken ben ancak test için Google Testini ve Mock kullanan bir çerçeve CKağıt projesini kurmak için çalışıyorum, bu bulamıyor yapı üzerinde şikayet proje için kaynak. Bunun nedeni, Google'ın şu anda iki proje dışında, googletest ve googlemock'u tek bir projede birleştirmesidir.

Repo dosya yapısının bazıları: Ben repo önek olduğum için

ben aşağıdakileri yapın
googletest-master/ 
├──[...no CMakeFiles.txt exists here...] 
├──googletest/ 
│ ├──src/ 
│ └──CMakeFiles.txt 
└──googlemock/ 
    ├──src/ 
    └──CMakeFiles.txt 

...

ExternalProject_Add(
    gtest 
    GIT_REPOSITORY https://github.com/google/googletest.git 
    TIMEOUT 10 
    INSTALL_COMMAND "" 
    LOG_DOWNLOAD ON 
    LOG_CONFIGURE ON 
    LOG_BUILD ON 
    PREFIX "googletest-master" 
) 

... o googletest-master/src/gtest gerçek repo indirir ana kaynak kodumdan uzak tutmak için "googletest-master" ile birlikte, yalnızca kaynak olan ve bu kaynağın kök dizininde olan bir projeyi indirdiğimi varsayar. Orada repo klonlanmış veya GitHub kapalı zip indirilen ve ayıkladıysanız olurdu tam olarak, googletest-master dizine

  1. İndir Repo:

    Yani iki şey başarmak istiyorum o.

  2. Yapı ve

cevap

7

Sen tek indirme adımı gerekir, ancak iki inşa adımları. Farklı ExternalProject_add komut çağrıları değil pay adımlar tutabilir, ancak aralarında uygun bağımlılıkları ile farklı aramalar içine tüm adımları düzenleyebilirsiniz: göreli yollar bazılarının bazı özelleştirme yapmak sona erdi benim ihtiyaçları/tercihlerinize göre

# Single download(git clone) 
ExternalProject_Add(
    googletest-master 
    DOWNLOAD_DIR "googletest-master/src" # The only dir option which is required 
    GIT_REPOSITORY https://github.com/google/googletest.git 
    TIMEOUT 10 
    LOG_DOWNLOAD ON 
    # Disable all other steps 
    CONFIGURE_COMMAND "" 
    BUILD_COMMAND "" 
    INSTALL_COMMAND "" 
) 

# Build gtest from existing sources 
ExternalProject_Add(
    gtest 
    DOWNLOAD_COMMAND "" # No download required 
    SOURCE_DIR "googletest-master/src/googletest" # Use specific source dir 
    PREFIX "googletest-master" # But use prefix for compute other dirs 
    INSTALL_COMMAND "" 
    LOG_CONFIGURE ON 
    LOG_BUILD ON 
) 

# gtest should be build after being downloaded 
add_dependencies(gtest googletest-master) 

# Build gmock from existing sources 
ExternalProject_Add(
    gmock 
    DOWNLOAD_COMMAND "" # No download required 
    SOURCE_DIR "googletest-master/src/googlemock" # Use specific source dir 
    PREFIX "googletest-master" # But use prefix for compute other dirs 
    INSTALL_COMMAND "" 
    LOG_CONFIGURE ON 
    LOG_BUILD ON 
) 

# gmock should be build after being downloaded 
add_dependencies(gmock googletest-master) 
+0

biraz daha fazla - bu çözüm ham bazı gereksiz yere karmaşık görünen dizin yapılarına yol açtı (googletest-master/src/googletest/src). Ama bu çalışır ve tam ihtiyacım olan şeydir. – AberrantWolf

0

ben GYTE yerine istediğiniz gibi, CMake kullanarak, ama eski SVN kaynak havuzunu kullanarak GTEST ve gmock kütüphaneleri içe bir repository benim CKağıt projesinde hem googletest ve googlemock var sayılabilir .

Anahtarın yalnızca gmock için kaynak aldığını düşünüyorum, çünkü bu kaynakların çoğunu içerir ve her iki kitaplığı da dışa aktarır.

CMakeLists.txt şuna benzer:

cmake_minimum_required(VERSION 2.8) 

include(ExternalProject) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

set(GMOCK_VERSION "1.7.0") 
set(GMOCK_DIR "${CMAKE_CURRENT_BINARY_DIR}/gmock-${GMOCK_VERSION}") 
ExternalProject_Add(project_gmock 
    SVN_REPOSITORY http://googlemock.googlecode.com/svn/tags/release-${GMOCK_VERSION} 
    PREFIX ${GMOCK_DIR} 
    CMAKE_ARGS -DCMAKE_C_COMPILER:PATH=${CMAKE_C_COMPILER} -DCMAKE_CXX_COMPILER:PATH=${CMAKE_CXX_COMPILER} 
    # Disable update step 
    UPDATE_COMMAND "" 
    # Disable install step 
    INSTALL_COMMAND "" 
) 
ExternalProject_Get_Property(project_gmock source_dir) 
ExternalProject_Get_Property(project_gmock binary_dir) 

include_directories(${source_dir}/gtest/include) 
add_library(gtest STATIC IMPORTED) 
set_property(TARGET gtest PROPERTY IMPORTED_LOCATION ${binary_dir}/gtest/libgtest.a) 
add_dependencies(gtest project_gmock) 
add_library(gtest_main STATIC IMPORTED) 
set_property(TARGET gtest_main PROPERTY IMPORTED_LOCATION ${binary_dir}/gtest/libgtest_main.a) 
add_dependencies(gtest_main project_gmock) 
include_directories(${source_dir}/include) 
add_library(gmock STATIC IMPORTED) 
set_property(TARGET gmock PROPERTY IMPORTED_LOCATION ${binary_dir}/libgmock.a) 
add_dependencies(gmock project_gmock) 
add_library(gmock_main STATIC IMPORTED) 
set_property(TARGET gmock_main PROPERTY IMPORTED_LOCATION ${binary_dir}/libgmock_main.a) 
add_dependencies(gmock_main project_gmock) 

include_directories(${cpp_utest_SOURCE_DIR}/src) 
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++") 
#add_executable(utests) 
#target_link_libraries(utests gmock_main gmock gtest pthread) 
İlgili konular