Debian은 더 이상 gTest 용으로 사전 컴파일 된 패키지를 제공하지 않습니다. 프레임 워크를 프로젝트의 메이크 파일에 통합 할 것을 제안합니다. 하지만 내 메이크 파일을 깨끗하게 유지하고 싶습니다. 라이브러리에 연결할 수 있도록 이전 버전 (<1.6.0)과 같이 gTest를 설정하려면 어떻게해야합니까?
Debian은 더 이상 gTest 용으로 사전 컴파일 된 패키지를 제공하지 않습니다. 프레임 워크를 프로젝트의 메이크 파일에 통합 할 것을 제안합니다. 하지만 내 메이크 파일을 깨끗하게 유지하고 싶습니다. 라이브러리에 연결할 수 있도록 이전 버전 (<1.6.0)과 같이 gTest를 설정하려면 어떻게해야합니까?
답변:
시작하기 전에 Google의이 메모를 읽고 이해했는지 확인하십시오 ! 이 튜토리얼은 gtest를 쉽게 사용할 수있게 해주지 만 끔찍한 버그 가 생길 수 있습니다 .
wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz
또는 손으로 가져 오십시오 . 이 작은 How-to는 유지하지 않을 것이므로 우연히 발견하고 링크가 구식이면 자유롭게 편집하십시오.
tar xf release-1.8.0.tar.gz
cd googletest-release-1.8.0
cmake -DBUILD_SHARED_LIBS=ON .
make
이 단계는 배포판마다 다를 수 있으므로 올바른 디렉토리에 헤더와 라이브러리를 복사해야합니다. 나는 데비안의 이전 gtest 라이브러리 가 어디에 있는지 확인함으로써 이것을 달성했습니다 . 하지만 더 나은 방법이 있다고 확신합니다. 참고 : make install
위험하며 지원되지 않습니다.
sudo cp -a googletest/include/gtest /usr/include
sudo cp -a googlemock/gtest/libgtest_main.so googlemock/gtest/libgtest.so /usr/lib/
... GNU 링커가 libs를 알고 있는지 확인하십시오.
sudo ldconfig -v | grep gtest
출력이 다음과 같은 경우 :
libgtest.so.0 -> libgtest.so.0.0.0
libgtest_main.so.0 -> libgtest_main.so.0.0.0
그러면 모든 것이 좋습니다.
이제 gTestframework를 사용할 준비가되었습니다. -lgtest
링커 플래그 로 설정 하고 선택적으로 자체 테스트 메인 루틴을 작성하지 않은 경우 명시 적 -lgtest_main
플래그 로 설정하여 프로젝트를 라이브러리에 연결하는 것을 잊지 마십시오 .
이제부터는 Google 문서 와 프레임 워크에 대한 이전 문서 로 이동하여 작동 방식을 배울 수 있습니다. 즐거운 코딩 되세요!
편집 : 이것은 OS X에서도 작동합니다! "OS X에서 googleTest를 올바르게 설정하는 방법"을 참조하십시오.
make install
수동 라이브러리와 헤더를 복사하는 대신 사용할 수있는 대상은?
'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system.
include/gtest
까지 내가 말할 수있는.
sudo cp -a libgtest_main.so libgtest.so /usr/lib/
하지 말고 더 이상 작동하지 마십시오. 파일이 시작되지 않습니다.
우분투 사용자를 위해 특별히 대답하겠습니다. 먼저 gtest 개발 패키지를 설치하십시오.
sudo apt-get install libgtest-dev
이 패키지는 소스 파일 만 설치합니다. 필요한 라이브러리 파일을 만들려면 코드를 직접 컴파일해야합니다. 이러한 소스 파일은 / usr / src / gtest에 있어야합니다. 이 폴더를 찾아 cmake를 사용하여 라이브러리를 컴파일합니다.
sudo apt-get install cmake # install cmake
cd /usr/src/gtest
sudo mkdir build
cd build
sudo cmake ..
sudo make
sudo make install
이제 gtest를 사용하는 프로그램을 컴파일하려면 다음과 연결해야합니다.
-lgtest -lgtest_main -lpthread
이것은 Ubuntu 14.04LTS에서 완벽하게 작동했습니다.
sudo cp *.a /usr/lib
, 그냥 repalce와 sudo make install
잘되어야한다.
정상적인 "make install"이 제거되고 cmake를 사용하지 않기 때문에 이것을 알아내는 데 시간이 걸렸습니다. 여기에 공유 할 경험이 있습니다. 직장에서는 Linux에서 루트 액세스 권한이 없으므로 홈 디렉토리 아래에 Google 테스트 프레임 워크를 설치했습니다 ~/usr/gtest/
.
~ / usr / gtest /에 패키지를 공유 라이브러리로 설치하고 샘플 빌드도 함께 설치하려면 :
$ mkdir ~/temp
$ cd ~/temp
$ unzip gtest-1.7.0.zip
$ cd gtest-1.7.0
$ mkdir mybuild
$ cd mybuild
$ cmake -DBUILD_SHARED_LIBS=ON -Dgtest_build_samples=ON -G"Unix Makefiles" ..
$ make
$ cp -r ../include/gtest ~/usr/gtest/include/
$ cp lib*.so ~/usr/gtest/lib
설치를 검증하려면 다음 test.c를 간단한 테스트 예제로 사용하십시오.
#include <gtest/gtest.h>
TEST(MathTest, TwoPlusTwoEqualsFour) {
EXPECT_EQ(2 + 2, 4);
}
int main(int argc, char **argv) {
::testing::InitGoogleTest( &argc, argv );
return RUN_ALL_TESTS();
}
컴파일하기:
$ export GTEST_HOME=~/usr/gtest
$ export LD_LIBRARY_PATH=$GTEST_HOME/lib:$LD_LIBRARY_PATH
$ g++ -I $GTEST_HOME/include -L $GTEST_HOME/lib -lgtest -lgtest_main -lpthread test.cpp
lgtest_main
)에 링크하는 경우 main
테스트 파일에서 직접 정의 할 필요가 없습니다 .
CMake를 사용 ExternalProject_Add
하는 경우 여기에 설명 된대로 사용할 수 있습니다 .
이렇게하면 저장소에 gtest 소스 코드를 보관하거나 어디에나 설치할 필요가 없습니다. 빌드 트리에 자동으로 다운로드되고 빌드됩니다.
Debian / Ubuntu 용 업데이트
Google Mock (패키지 :) google-mock
과 Google 테스트 (패키지 libgtest-dev
:)가 병합되었습니다. 새 패키지는라고 googletest
합니다. 이전 이름 모두 이전 버전과의 호환성을 위해 계속 사용할 수 있으며 이제 새 패키지에 의존합니다.googletest
.
따라서 패키지 저장소에서 라이브러리를 가져 오려면 다음을 수행 할 수 있습니다.
sudo apt-get install googletest -y
cd /usr/src/googletest
sudo mkdir build
cd build
sudo cmake ..
sudo make
sudo cp googlemock/*.a googlemock/gtest/*.a /usr/lib
그런 다음에 대해 -lgmock
(또는 -lgmock_main
사용자 지정 기본 메서드를 사용하지 않는 경우) 및 -lpthread
. 이것은 적어도 내 경우에 Google Test를 사용하기에 충분했습니다.
최신 버전의 Google 테스트를 원하면 github에서 다운로드하세요. 그 후 단계는 비슷합니다.
git clone https://github.com/google/googletest
cd googletest
sudo mkdir build
cd build
sudo cmake ..
sudo make
sudo cp lib/*.a /usr/lib
보시다시피 라이브러리가 생성되는 경로가 변경되었습니다. 새 경로는 곧 패키지 리포지토리에 대해서도 유효 할 수 있습니다.
라이브러리를 수동으로 복사하는 대신 sudo make install
. "현재"작동하지만 항상 과거에는 작동하지 않았다는 점에 유의하십시오. 또한이 명령을 사용할 때 대상 위치를 제어 할 수 없으며 오염을 원하지 않을 수 있습니다 /usr/lib
.
나는 이와 비슷하게이 상황에 압도 당했고 결국이를위한 우분투 소스 패키지를 만들었다. 이러한 소스 패키지를 사용하면 바이너리 패키지를 쉽게 생성 할 수 있습니다. 이 게시물의 최신 gtest 및 gmock 소스를 기반으로합니다.
바이너리 패키지를 빌드하려면 다음을 수행하십시오.
tar -xzvf gtest-1.7.0.tar.gz
cd gtest-1.7.0
dpkg-source -x gtest_1.7.0-1.dsc
cd gtest-1.7.0
dpkg-buildpackage
몇 가지 전제 조건 패키지가 필요하다는 메시지가 표시 될 수 있습니다.이 경우 apt-get 설치 만하면됩니다. 그 외에도 빌드 된 .deb 바이너리 패키지는 상위 디렉토리에 있어야합니다.
GMock의 경우 프로세스는 동일합니다.
참고로, 내 소스 패키지에 국한되지는 않지만, 단위 테스트에 gtest를 연결할 때 gtest가 먼저 포함되어 있는지 확인 하십시오 ( https://bbs.archlinux.org/viewtopic.php?id=156639 ) 일반적인 잡았다.
testing::Message::Message()' test.cpp:(.text+0x84): undefined reference to
testing :: internal :: AssertHelper :: AssertHelper (testing :: TestPartResult :: Type, char const *, int, char const *) '테스트에 대한 정의되지 않은 참조가 있습니다. cpp :(. text + 0x97) :`testing :: internal :: AssertHelper :: operator = (testing :: Message const &) const '에 대한 정의되지 않은 참조 ... 너무 길어서 전체 내용을 게시 할 수 없습니다. 새로운 Ubuntu 14.04 VM에서이 작업을 수행했기 때문에 필요한 종속성을 제외하고는 아무것도 설치되지 않았습니다.
#include <gtest/gtest.h> TEST(MathTest, TwoPlusTwoEqualsFour) { EXPECT_EQ(2 + 2, 4); } int main(int argc, char **argv) { ::testing::InitGoogleTest( &argc, argv ); return RUN_ALL_TESTS(); }
다른 누군가가 어제 (2016-06-22)와 같은 상황에 처해 있고 이미 게시 된 접근 방식으로도 성공하지 못하는 Lubuntu 14.04
경우를 대비하여 다음 명령 체인을 사용하여 저에게 효과적이었습니다.
git clone https://github.com/google/googletest
cd googletest
cmake -DBUILD_SHARED_LIBS=ON .
make
cd googlemock
sudo cp ./libgmock_main.so ./gtest/libgtest.so gtest/libgtest_main.so ./libgmock.so /usr/lib/
sudo ldconfig
askubuntu 의이 대답은 나를 위해 일한 것입니다. 패키지 libgtest-dev
를 사용 하여 소스를 가져오고 거기에서 빌드하기 때문에 다른 옵션보다 더 간단 해 보입니다 . /ubuntu/145887/why-no-library-files-installed-for-google- test? answertab = votes # tab-top
해당 답변을 참조하십시오. 지름길로 여기에 단계도 제공합니다.
sudo apt-get install -y libgtest-dev
sudo apt-get install -y cmake
cd /usr/src/gtest
sudo cmake .
sudo make
sudo mv libg* /usr/lib/
그 후 gtest
문제없이 의존하는 프로젝트를 만들 수있었습니다 .
다음 방법은 /usr/lib
디렉토리를 수동으로 엉망으로 만드는 것을 방지 하면서 CMakeLists.txt
파일을 최소한으로 변경해야 합니다. 또한 패키지 관리자가 깨끗하게 제거 할 수 있습니다.libgtest-dev
.
아이디어는 libgtest-dev
패키지를 통해 얻을 때
sudo apt install libgtest-dev
소스는 위치에 저장됩니다. /usr/src/googletest
CMakeLists.txt
필요한 종속성을 찾을 수 있도록 해당 디렉토리 를 가리 키기 만하면됩니다.
간단하게 교체 FindGTest
와 함께add_subdirectory(/usr/src/googletest gtest)
마지막에는 다음과 같이 보일 것입니다.
add_subdirectory(/usr/src/googletest gtest)
target_link_libraries(your_executable gtest)
Ubuntu / Debian 기반 시스템에 Google 테스트 및 모의 라이브러리를 설치합니다.
sudo apt-get install google-mock
데비안 기반 이미지의 Google 클라우드에서 테스트되었습니다.
googlemock
하지만 설치하지 않습니다 googletest
(gtest). 적어도 그것은 나에게 일어난 일입니다.
gtest와 gmock 1.7.0을 모두 빌드하고 설치합니다.
mkdir /tmp/googleTestMock
tar -xvf googletest-release-1.7.0.tar.gz -C /tmp/googleTestMock
tar -xvf googlemock-release-1.7.0.tar.gz -C /tmp/googleTestMock
cd /tmp/googleTestMock
mv googletest-release-1.7.0 gtest
cd googlemock-release-1.7.0
cmake -DBUILD_SHARED_LIBS=ON .
make -j$(nproc)
sudo cp -a include/gmock /usr/include
sudo cp -a libgmock.so libgmock_main.so /usr/lib/
sudo cp -a ../gtest/include/gtest /usr/include
sudo cp -a gtest/libgtest.so gtest/libgtest_main.so /usr/lib/
sudo ldconfig
@ ManuelSchneid3r의 답변을 기반으로 1.8.1의 경우 다음을 수행해야했습니다.
wget github.com/google/googletar xf release-1.8.1.tar.gz
tar xf release-1.8.1.tar.gz
cd googletest-release-1.8.1/
cmake -DBUILD_SHARED_LIBS=ON .
make
그런 다음 make install
1.8.1에서 작동하는 것처럼 보이지만 @ ManuelSchneid3r을 따르는 것은 의미합니다.
sudo cp -a googletest/include/gtest /usr/include
sudo cp -a googlemock/include/gmock /usr/include
sudo cp `find .|grep .so$` /usr/lib/
./configure && make && make install
워크 플로가 잘 작동합니다. 소스에서 다른 많은 패키지를 컴파일하는 것과 다르지 않기 때문에 이것이 게시물을 보장하는지 확실하지 않습니다.