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
Çö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 )
Nasıl bir uygulama android ADB araçlar...
Nasıl Internet Explorer uzantıları gel...
Nasıl Windows 7 araçları başlamak için...
Nasıl C etkinleştirmek CMake 11 için?...
Nasıl svn:dışındakiler ile başlamak iç...