SORU
14 Aralık 2011, ÇARŞAMBA


Nasıl GTest ve CMake ile çalışmaya başlamak için

Son zamanlarda benim C proje derleme için CMake kullanarak satıldı ve şimdi bazı birim testleri yazmak benim kod için başlamak istiyorum. Google Test Programı ile yardım için kullanmaya karar verdim, ama başlarken biraz yardım gerektirir.

Bütün gün ben okuma çeşitli kılavuzlar ve örnekler Primer introduction at IBM ve bazı sorular ÇOK (here here) yanı sıra diğer kaynaklardan izini kaybettim. Bir sürü var biliyorum ama nedense hala zorluklar yaşıyorum.

Şu anda yüklü gtest doğru derlenmiş/I've onaylamak için en temel test uygulamaya çalışıyorum ve işe yaramıyor. Sadece kaynak dosya (testgtest.cpp neredeyse tam this önceki cevap alınmıştır:

#include <iostream>

#include "gtest/gtest.h"

TEST(sample_test_case, sample_test)
{
    EXPECT_EQ(1, 1);
}

ve ilişkili benim CMakeLists.txt aşağıdaki gibidir:

cmake_minimum_required(VERSION 2.6)
project(basic_test)

# Setup testing
enable_testing()
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIR})

# Add test cpp file
add_executable(runUnitTests
    testgtest.cpp
)

# Link test executable against gtest & gtest_main
target_link_libraries(runUnitTests ${GTEST_LIBRARY_DEBUG} ${GTEST_MAIN_LIBRARY_DEBUG})

add_test(
    NAME runUnitTests
    COMMAND runUnitTests
)

Bu beni ölçek için izin verir inanıyorum cpp dosyası sonunda temel sağlamak yerine gtest_main karşı bağlamak için daha kolay birden fazla dosya için test seçtim unutmayın.

Oluşturulan yapı .sln DOSYASı (Visual C 2010 Express) ben ne yazık ki form hataları uzun bir liste olsun

2>msvcprtd.lib(MSVCP100D.dll) : error LNK2005: "public: virtual __thiscall std::basic_iostream<char,struct std::char_traits<char> >::~basic_iostream<char,struct std::char_traits<char> >(void)" (??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UAE@XZ) already defined in gtestd.lib(gtest-all.obj)

bence gtest kütüphanelere başarıyla bağlanıyorum anlamına gelir. Hata ayıklama kitaplıkları karşı bağlarken, daha sonra hata ayıklama modunda oluşturmak için çalıştık ettim tabii.

EDİT

Biraz daha araştırma yaptıktan sonra, sorunumu kütüphane türü ile ilgili bir şey olduğunu düşünüyorum içine gtest yapıyorum. CMake ile gtest oluştururken, BUILD_SHARED_LIBS BM tarafından kontrol edilir, ve bu karşı benim program ben link .lib yukarıda belirtilen hata alıyorum dosyaları. Eğer BUILD_SHARED_LIBS işaretli ise, o zaman bir dizi yapıyorum .lib ve .dll dosyaları. Şimdi bu karşı bağlama .programı derler, ama çalıştırmak lib dosyaları gtest.dll bulamıyorum yakınıyor.

SHARED SHARED bir kütüphane arasında ne gibi farklılıklar ve paylaşılan seçersem değil, neden çalışmıyor? Eksik olduğum projem için cmakelists.txt bir seçenek var mı?

CEVAP
31 Ocak 2014, Cuma


Çözüm projesinin bir alt dizin olarak gtest kaynak dizini koyarak dahil. Eğer herkes için yararlı ise aşağıda çalışma cmakelists.txt ekledim.

cmake_minimum_required(VERSION 2.6)
project(basic_test)

################################
# GTest
################################
ADD_SUBDIRECTORY (gtest-1.6.0)
enable_testing()
include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR})

################################
# Unit Tests
################################
# Add test cpp file
add_executable( runUnitTests testgtest.cpp )
# Link test executable against gtest & gtest_main
target_link_libraries(runUnitTests gtest gtest_main)
add_test( runUnitTests runUnitTests )

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DominicFear

    DominicFear

    30 Kasım 2006
  • thepoke64738

    thepoke64738

    17 HAZİRAN 2011
  • Tire Rack

    Tire Rack

    31 Mayıs 2007