Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Can';不要在cmake脚本中包含googletest_C++_Cmake_Googletest - Fatal编程技术网

C++ Can';不要在cmake脚本中包含googletest

C++ Can';不要在cmake脚本中包含googletest,c++,cmake,googletest,C++,Cmake,Googletest,我尝试在windows上创建一些小项目,但当我尝试使用cmake构建此项目时,出现了许多错误。在linux上,此构建成功。当我用cmakeallwork创建虚拟项目时。这是我的文件夹结构: 外行 谷歌测试 测验 CMakeLists.txt CMakeLists.txt 根目录CMakeLists.txt: # Setup cmake minimal required version cmake_minimum_required(VERSION 3.10) # Declar

我尝试在windows上创建一些小项目,但当我尝试使用cmake构建此项目时,出现了许多错误。在linux上,此构建成功。当我用cmakeallwork创建虚拟项目时。这是我的文件夹结构:

  • 外行
    • 谷歌测试
  • 测验
    • CMakeLists.txt
  • CMakeLists.txt
根目录CMakeLists.txt:

# Setup cmake minimal required version
cmake_minimum_required(VERSION 3.10)

# Declare project
project(mobile_speaker_driver)

# Change c++ standard
set(CMAKE_CXX_STANDARD 17)

# Adding googletest to project
option(PACKAGE_TESTS "Build the tests" ON)
if(PACKAGE_TESTS)
    enable_testing()
    include(GoogleTest)
    add_subdirectory(tests)
endif()

# Add source files to driver library
if (WIN32)
    set(SOURCE_FILES apps/main.cpp src/AudioDriver.cpp src/AudioDriverWindows.cpp)
elseif (UNIX)
    set(SOURCE_FILES apps/main.cpp src/AudioDriver.cpp src/AudioDriverLinux.cpp)
endif (WIN32)

add_executable(${PROJECT_NAME} ${SOURCE_FILES})
set(TESTBINARY ${PROJECT_NAME}_test)

add_subdirectory("${PROJECT_SOURCE_DIR}/extern/googletest" "extern/googletest")

add_executable(${TESTBINARY} main.cpp AudioDriverTest.cpp)

target_link_libraries(${TESTBINARY} gtest gtest_main)
测试CMakeLists.txt:

# Setup cmake minimal required version
cmake_minimum_required(VERSION 3.10)

# Declare project
project(mobile_speaker_driver)

# Change c++ standard
set(CMAKE_CXX_STANDARD 17)

# Adding googletest to project
option(PACKAGE_TESTS "Build the tests" ON)
if(PACKAGE_TESTS)
    enable_testing()
    include(GoogleTest)
    add_subdirectory(tests)
endif()

# Add source files to driver library
if (WIN32)
    set(SOURCE_FILES apps/main.cpp src/AudioDriver.cpp src/AudioDriverWindows.cpp)
elseif (UNIX)
    set(SOURCE_FILES apps/main.cpp src/AudioDriver.cpp src/AudioDriverLinux.cpp)
endif (WIN32)

add_executable(${PROJECT_NAME} ${SOURCE_FILES})
set(TESTBINARY ${PROJECT_NAME}_test)

add_subdirectory("${PROJECT_SOURCE_DIR}/extern/googletest" "extern/googletest")

add_executable(${TESTBINARY} main.cpp AudioDriverTest.cpp)

target_link_libraries(${TESTBINARY} gtest gtest_main)
错误:

D:/Projects/mobile-speaker-driver/extern/googletest/googletest/include/gtest/internal/gtest-port.h: In function 'int testing::internal::posix::StrCaseCmp(const char*, const char*)':
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/include/gtest/internal/gtest-port.h:1985:10: error: '_stricmp' was not declared in this scope; did you mean 'strncmp'?
 1985 |   return _stricmp(s1, s2);
      |          ^~~~~~~~
      |          strncmp
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/include/gtest/internal/gtest-port.h: In function 'char* testing::internal::posix::StrDup(const char*)':
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/include/gtest/internal/gtest-port.h:1987:47: error: '_strdup' was not declared in this scope
 1987 | inline char* StrDup(const char* src) { return _strdup(src); }
      |                                               ^~~~~~~
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/include/gtest/internal/gtest-port.h: In function 'int testing::internal::posix::FileNo(FILE*)':
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/include/gtest/internal/gtest-port.h:1995:40: error: '_fileno' was not declared in this scope; did you mean 'file'?
 1995 | inline int FileNo(FILE* file) { return _fileno(file); }
      |                                        ^~~~~~~
      |                                        file
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/include/gtest/internal/gtest-port.h: In function 'FILE* testing::internal::posix::FDOpen(int, const char*)':
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/include/gtest/internal/gtest-port.h:2072:56: error: 'fdopen' was not declared in this scope; did you mean 'fopen'?
 2072 | inline FILE* FDOpen(int fd, const char* mode) { return fdopen(fd, mode); }
      |                                                        ^~~~~~
      |                                                        fopen
In file included from D:/Projects/mobile-speaker-driver/extern/googletest/googletest/src/gtest-all.cc:41:
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/src/gtest.cc: In static member function 'static bool testing::internal::String::CaseInsensitiveWideCStringEquals(const wchar_t*, const wchar_t*)':
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/src/gtest.cc:2077:10: error: '_wcsicmp' was not declared in this scope; did you mean 'wcsncmp'?
 2077 |   return _wcsicmp(lhs, rhs) == 0;
      |          ^~~~~~~~
      |          wcsncmp
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/src/gtest.cc: In member function 'int testing::UnitTest::Run()':
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/src/gtest.cc:5253:21: error: '_OUT_TO_STDERR' was not declared in this scope
 5253 |     _set_error_mode(_OUT_TO_STDERR);
      |                     ^~~~~~~~~~~~~~
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/src/gtest.cc:5253:5: error: '_set_error_mode' was not declared in this scope
 5253 |     _set_error_mode(_OUT_TO_STDERR);
      |     ^~~~~~~~~~~~~~~
In file included from D:/Projects/mobile-speaker-driver/extern/googletest/googletest/src/gtest-all.cc:42:
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/src/gtest-death-test.cc: In function 'void testing::internal::DeathTestAbort(const string&)':
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/src/gtest-death-test.cc:296:5: error: '_exit' was not declared in this scope; did you mean '_cexit'?
  296 |     _exit(1);
      |     ^~~~~
      |     _cexit
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/src/gtest-death-test.cc: In member function 'virtual void testing::internal::DeathTestImpl::Abort(testing::internal::DeathTest::AbortReason)':
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/src/gtest-death-test.cc:527:3: error: '_exit' was not declared in this scope; did you mean '_cexit'?
  527 |   _exit(1);  // Exits w/o any normal exit hooks (we were supposed to crash)
      |   ^~~~~
      |   _cexit
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/src/gtest-death-test.cc: In member function 'virtual testing::internal::DeathTest::TestRole testing::internal::WindowsDeathTest::AssumeRole()':
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/src/gtest-death-test.cc:771:24: error: '_MAX_PATH' was not declared in this scope; did you mean 'MAX_PATH'?
  771 |   char executable_path[_MAX_PATH + 1];  // NOLINT
      |                        ^~~~~~~~~
      |                        MAX_PATH
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/src/gtest-death-test.cc:773:65: error: 'executable_path' was not declared in this scope
  773 |                                                                 executable_path,
      |                                                                 ^~~~~~~~~~~~~~~
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/src/gtest-death-test.cc:308:38: note: in definition of macro 'GTEST_DEATH_TEST_CHECK_'
  308 |     if (!::testing::internal::IsTrue(expression)) { \
      |                                      ^~~~~~~~~~
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/src/gtest-death-test.cc:797:11: error: 'executable_path' was not declared in this scope
  797 |           executable_path, const_cast<char*>(command_line.c_str()),
      |           ^~~~~~~~~~~~~~~
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/src/gtest-death-test.cc:308:38: note: in definition of macro 'GTEST_DEATH_TEST_CHECK_'
  308 |     if (!::testing::internal::IsTrue(expression)) { \
      |                                      ^~~~~~~~~~
In file included from D:/Projects/mobile-speaker-driver/extern/googletest/googletest/src/gtest-all.cc:43:
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/src/gtest-filepath.cc: In static member function 'static testing::internal::FilePath testing::internal::FilePath::GetCurrentDir()':
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/src/gtest-filepath.cc:49:26: error: '_MAX_PATH' was not declared in this scope; did you mean 'MAX_PATH'?
   49 | # define GTEST_PATH_MAX_ _MAX_PATH
      |                          ^~~~~~~~~
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/src/gtest-filepath.cc:101:12: note: in expansion of macro 'GTEST_PATH_MAX_'
  101 |   char cwd[GTEST_PATH_MAX_ + 1] = { '\0' };
      |            ^~~~~~~~~~~~~~~
D:/Projects/mobile-speaker-driver/extern/googletest/googletest/src/gtest-filepath.cc:102:27: error: 'cwd' was not declared in this scope
  102 |   return FilePath(_getcwd(cwd, sizeof(cwd)) == nullptr ? "" : cwd);
      |                           ^~~
make.exe[2]: *** [tests/extern/googletest/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.obj] Ошибка 1
make.exe[1]: *** [tests/extern/googletest/googletest/CMakeFiles/gtest.dir/all] Ошибка 2
make.exe: *** [all] Ошибка 2
D:/Projects/mobile speaker driver/extern/googletest/googletest/include/gtest/internal/gtest port.h:在函数“int testing::internal::posix::StrCaseCmp(const char*,const char*)”中:
D:/Projects/mobile speaker driver/extern/googletest/googletest/include/gtest/internal/gtest port.h:1985:10:错误:“\u stricmp”未在此范围内声明;你是说“strncmp”吗?
1985年返回(s1,s2);
|          ^~~~~~~~
|strncmp
D:/Projects/mobile speaker driver/extern/googletest/googletest/include/gtest/internal/gtest port.h:在函数“char*testing::internal::posix::StrDup(const char*)”中:
D:/Projects/mobile speaker driver/extern/googletest/googletest/include/gtest/internal/gtest port.h:1987:47:错误:“\u strdup”未在此范围内声明
1987 | inline char*StrDup(const char*src){return u StrDup(src);}
|                                               ^~~~~~~
D:/Projects/mobile speaker driver/extern/googletest/googletest/include/gtest/internal/gtest port.h:在函数“int testing::internal::posix::FileNo(FILE*)”中:
D:/Projects/mobile speaker driver/extern/googletest/googletest/include/gtest/internal/gtest port.h:1995:40:错误:“\u fileno”未在此范围内声明;你是说“文件”吗?
1995 | inline int FileNo(FILE*FILE){return _FileNo(FILE);}
|                                        ^~~~~~~
|文件
D:/Projects/mobile speaker driver/extern/googletest/googletest/include/gtest/internal/gtest port.h:在函数“FILE*testing::internal::posix::FDOpen(int,const char*)”中:
D:/Projects/mobile speaker driver/extern/googletest/googletest/include/gtest/internal/gtest port.h:2072:56:错误:未在此范围内声明“fdopen”;你是说“fopen”吗?
2072 |内联文件*FDOpen(int-fd,const-char*mode){返回FDOpen(fd,mode);}
|                                                        ^~~~~~
|福彭
文件包括在D:/Projects/mobile speaker driver/extern/googletest/googletest/src/gtest all.cc:41中:
D:/Projects/mobile speaker driver/extern/googletest/googletest/src/gtest.cc:在静态成员函数“static bool testing::internal::String::CaseInsensitiveWideCStringEquals(const wchar_t*,const wchar_t*)”中:
D:/Projects/mobile speaker driver/extern/googletest/googletest/src/gtest.cc:2077:10:错误:“\u wcsicmp”未在此范围内声明;你是说“wcsncmp”吗?
2077 |返回_wcsicmp(左侧、右侧)==0;
|          ^~~~~~~~
|wcsncmp
D:/Projects/mobile speaker driver/extern/googletest/googletest/src/gtest.cc:在成员函数“int testing::UnitTest::Run()”中:
D:/Projects/mobile speaker driver/extern/googletest/googletest/src/gtest.cc:5253:21:错误:“\u OUT\u TO\u STDERR”未在此范围内声明
5253 | | |设置|错误|模式(|输出|至|标准);
|                     ^~~~~~~~~~~~~~
D:/Projects/mobile speaker driver/extern/googletest/googletest/src/gtest.cc:5253:5:错误:“\u set\u error\u mode”未在此范围内声明
5253 | | |设置|错误|模式(|输出|至|标准);
|     ^~~~~~~~~~~~~~~
在D:/Projects/mobile speaker driver/extern/googletest/googletest/src/gtest all.cc:42中包含的文件中:
D:/Projects/mobile speaker driver/extern/googletest/googletest/src/gtest-death-test.cc:在函数“void testing::internal::death testabort(const string&)”中:
D:/Projects/mobile speaker driver/extern/googletest/googletest/src/gtest death test.cc:296:5:错误:“\u exit”未在此范围内声明;你的意思是“_cexit”?
296 | u出口(1);
|     ^~~~~
|_cexit
D:/Projects/mobile speaker driver/extern/googletest/googletest/src/gtest-death-test.cc:在成员函数“virtual void testing::internal::death testimpl::Abort(testing::internal::death test::AbortReason)”中:
D:/Projects/mobile speaker driver/extern/googletest/googletest/src/gtest death test.cc:527:3:错误:“\u exit”未在此范围内声明;你的意思是“_cexit”?
527 | u出口(1);//没有任何正常出口挂钩的出口(我们本来应该撞车的)
|   ^~~~~
|_cexit
D:/Projects/mobile speaker driver/extern/googletest/googletest/src/gtest-death-test.cc:在成员函数“virtual testing::internal::death test::TestRole testing::internal::WindowsDeathTest::AssumeRole()”中:
D:/Projects/mobile speaker driver/extern/googletest/googletest/src/gtest death test.cc:771:24:错误:“\u MAX\u PATH”未在此范围内声明;你是说“MAX_PATH”吗?
771 |字符可执行路径[_MAX_path+1];//诺林特
|                        ^~~~~~~~~
|最大路径
D:/Projects/mobile speaker driver/extern/googletest/googletest/src/gtest death test.cc:773:65:错误:“可执行路径”未在此范围内声明
773 |可执行路径,
|                                                                 ^~~~~~~~~~~~~~~
D:/Projects/mobile speaker driver/extern/googletest/googletest/src/gtest death test.cc:308:38:注意:在宏“gtest\u death\u test\u CHECK”的定义中
308 | if(!::testing::internal::IsTrue(表达式)){\
|                                      ^~~~~~~~~~
D:/Projects/mobile speaker driver/extern/googletest/googletest/src/gtest death test.cc:797:11:错误:“可执行路径”未在此范围内声明
797 |可执行路径,const_cast(command_line.c_str()),
|           ^~~~~~~~~~~~~~~
D:/项目