C++ CGED不考虑-p螺纹
我正在尝试使用gmock/gtest为我的程序制作一个测试台;Linux/Ubuntu;KDevelop/CMake。从链接错误消息中,我得出结论,gtest包的一部分缺少pthread支持C++ CGED不考虑-p螺纹,c++,cmake,pthreads,googletest,C++,Cmake,Pthreads,Googletest,我正在尝试使用gmock/gtest为我的程序制作一个测试台;Linux/Ubuntu;KDevelop/CMake。从链接错误消息中,我得出结论,gtest包的一部分缺少pthread支持 /home/projects/cpp/gmock/gtest/libgtest.a(gtest-all.cc.o): In function `testing::internal::ThreadLocal<testing::TestPartResultReporterInterface*>::~
/home/projects/cpp/gmock/gtest/libgtest.a(gtest-all.cc.o): In function `testing::internal::ThreadLocal<testing::TestPartResultReporterInterface*>::~ThreadLocal()':
gtest-all.cc:(.text._ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED2Ev[_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED5Ev]+0x16): undefined reference to `pthread_getspecific'
gtest-all.cc:(.text._ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED2Ev[_ZN7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEED5Ev]+0x2b): undefined reference to `pthread_key_delete'
但是,我在Makefile中看不到任何效果。
我是不是从我的CMAKLISTS.TXT中漏掉了一些东西,或者CGube没有考虑上面的线?
我的CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
add_definitions( -Dpthread )
project(ThreadTest)
INCLUDE_DIRECTORIES(gmock/gtest/include)
set ( GTEST_LIBS libgtest.a )
link_directories( ~/projects/cpp/gmock/gtest)
add_executable(ThreadTest main_test.cpp)
target_link_libraries(ThreadTest ${GTEST_LIBS})
我是否误解了“添加定义”在这种情况下应该起作用
读后
我的问题看起来像是重复的。但是,
cmake_minimum_required(VERSION 2.8)
add_definitions( -Dpthread )
project(ThreadTest)
INCLUDE_DIRECTORIES(gmock/gtest/include)
find_package( Threads )
set ( GTEST_LIBS libgtest.a )
link_directories( ~/projects/cpp/gmock/gtest)
add_executable(ThreadTest main_test.cpp)
target_link_libraries(ThreadTest ${GTEST_LIBS} ${CMAKE_THREAD_LIBS_INIT})
仍然发出警告“找不到线程”。我试图在Ubuntu软件中心搜索线程,但没有结果。之后,我安装了libghc-threads-dev
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
find_package(Threads REQUIRED)
我一直收到“找不到线程”的错误消息。当简单的Makefile生成我所期望的东西时,我应该做什么来满足find_包,为什么会出现这个问题
PS:我的主文件:
#include "gmock/gtest/include/gtest/gtest.h"
TEST(blahTest, blah1) {
EXPECT_EQ(1, 1);
}
int main (int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
int returnValue;
returnValue = RUN_ALL_TESTS();
return returnValue;
}
我在自己的项目中集成了Google测试框架,这个CMake文件正在运行
# Google C++ Testing Framework
# https://code.google.com/p/googletest/
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})
if(WIN32)
# GTest is static compiled by default
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
endif()
enable_testing()
add_executable(ThreadTest main_test.cpp)
target_link_libraries(ThreadTest ${GTEST_BOTH_LIBRARIES})
CMake警告找不到与错误相关的线程:
我在自己的项目中集成了Google测试框架,这个CMake文件正在运行
# Google C++ Testing Framework
# https://code.google.com/p/googletest/
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})
if(WIN32)
# GTest is static compiled by default
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
endif()
enable_testing()
add_executable(ThreadTest main_test.cpp)
target_link_libraries(ThreadTest ${GTEST_BOTH_LIBRARIES})
CMake警告找不到与错误相关的线程:
在忙碌的几个小时后,我成功地使用KDevelop/CMake/gtest编译了我的超级复杂测试程序
#include "gtest-1.7.0/include/gtest/gtest.h"
TEST(blahTest, blah1) {
EXPECT_EQ(1, 1);
}
int main (int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
可以执行此任务的CMakeLists.txt文件是
# http://stackoverflow.com/questions/13513905/how-to-properly-setup-googletest-on-linux/13513907#13513907
# http://stackoverflow.com/questions/15193785/how-to-get-cmake-to-recognize-pthread-on-ubuntu
# http://stackoverflow.com/questions/21116622/undefined-reference-to-pthread-key-create-linker-error
# http://stackoverflow.com/questions/1620918/cmake-and-libpthread
# https://meekrosoft.wordpress.com/2009/10/04/testing-c-code-with-the-googletest-framework/
# http://stackoverflow.com/questions/30106608/googletest-cmake-and-make-tests-not-running
# http://stackoverflow.com/questions/13521618/c-project-organisation-with-gtest-cmake-and-doxygen
# http://www.kaizou.org/2014/11/gtest-cmake/
cmake_minimum_required(VERSION 2.8)
project(ThreadTest C CXX)
ADD_SUBDIRECTORY (gtest-1.7.0)
enable_testing()
#set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
find_package(GTest REQUIRED)
include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR})
if(NOT MSVC)
set(PThreadLib -pthread)
endif()
add_executable(ThreadTest main_test.cpp)
target_link_libraries(ThreadTest ${PThreadLib} ${GTEST_LIBRARIES})
#add_test(ThreadTest ThreadTest)
我想强调一些事情:一些有价值的链接和
project(ThreadTest C CXX) rather than project(ThreadTest)
及
我想其余的都可以处理。这可能是一个很好的起点。在繁忙的几个小时后,我成功地使用KDevelop/CMake/gtest编译了我的超级复杂测试程序
#include "gtest-1.7.0/include/gtest/gtest.h"
TEST(blahTest, blah1) {
EXPECT_EQ(1, 1);
}
int main (int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
可以执行此任务的CMakeLists.txt文件是
# http://stackoverflow.com/questions/13513905/how-to-properly-setup-googletest-on-linux/13513907#13513907
# http://stackoverflow.com/questions/15193785/how-to-get-cmake-to-recognize-pthread-on-ubuntu
# http://stackoverflow.com/questions/21116622/undefined-reference-to-pthread-key-create-linker-error
# http://stackoverflow.com/questions/1620918/cmake-and-libpthread
# https://meekrosoft.wordpress.com/2009/10/04/testing-c-code-with-the-googletest-framework/
# http://stackoverflow.com/questions/30106608/googletest-cmake-and-make-tests-not-running
# http://stackoverflow.com/questions/13521618/c-project-organisation-with-gtest-cmake-and-doxygen
# http://www.kaizou.org/2014/11/gtest-cmake/
cmake_minimum_required(VERSION 2.8)
project(ThreadTest C CXX)
ADD_SUBDIRECTORY (gtest-1.7.0)
enable_testing()
#set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
find_package(GTest REQUIRED)
include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR})
if(NOT MSVC)
set(PThreadLib -pthread)
endif()
add_executable(ThreadTest main_test.cpp)
target_link_libraries(ThreadTest ${PThreadLib} ${GTEST_LIBRARIES})
#add_test(ThreadTest ThreadTest)
我想强调一些事情:一些有价值的链接和
project(ThreadTest C CXX) rather than project(ThreadTest)
及
我想其余的都可以处理。这可能是一个很好的起点。您只需使用pthread链接即可:
target_link_libraries(BUILD_ARTIFACT pthread)
BUILD_工件可以是您的项目或库名称。您应该在定义工件之后添加这一行
例如,如果您的构建工件是ThreadTest:
您只需使用pthread链接即可:
target_link_libraries(BUILD_ARTIFACT pthread)
BUILD_工件可以是您的项目或库名称。您应该在定义工件之后添加这一行
例如,如果您的构建工件是ThreadTest:
CMake添加链接库线程的可能重复CMake添加链接库线程的可能重复Hm。我的系统一直在告诉我:make-j2 CMake Error at/usr/share/CMake-2.8/Modules/FindPackageHandleStandardArgs.CMake:108消息:找不到缺少的GTest:GTest_LIBRARY GTest_MAIN_libgtest dev已安装谢谢你的提示,我不知道,直到现在,我猜,它只是gmock的一部分。根据该消息来源,但gmock不见了。不管怎样,我以后会试试的。我的系统一直在告诉我:make-j2 CMake Error at/usr/share/CMake-2.8/Modules/FindPackageHandleStandardArgs.CMake:108消息:找不到缺少的GTest:GTest_LIBRARY GTest_MAIN_libgtest dev已安装谢谢你的提示,我不知道,直到现在,我猜,它只是gmock的一部分。根据该消息来源,但gmock不见了。无论如何,我以后会试试的。