cmake 스크립트 내에 googletest를 포함 할 수 없습니다.

NullShan0x

Windows에서 작은 프로젝트를 만들려고하는데 cmake로 빌드하려고하면 많은 오류가 발생합니다. Linux에서는 성공적으로 빌드됩니다. CMake로 더미 프로젝트를 만들 때 모두 작동합니다. 이것은 내 폴더 구조입니다.

  • 외부
    • googletest
  • 테스트
    • ...
    • 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})

CMakeLists.txt를 테스트합니다.

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
NullShan0x

C ++ 17 플래그로 googletest를 강제 빌드하기 때문에 문제가 발생합니다. CMAKE_CXX_STANDARD메인 CMakeLists.txt에 googletest가 포함 된 뒤에 배치 하십시오.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

다른 함수 자바 스크립트 내에서 함수를 호출 할 수 없습니다.

분류에서Dev

함수 내에서 스크립트 범위 변수를 수정할 수 없습니다.

분류에서Dev

JavaScript에 innerHTML이 포함 된 인라인 스크립트를 리팩터링 할 수 없습니다.

분류에서Dev

자바 스크립트는 함수 내에서 전역 개체를 재정의 할 수 없습니다.

분류에서Dev

BASH 스크립트의 함수 내부에서 호출 할 때 SUDO를 찾을 수 없습니다.

분류에서Dev

CSharpCodeProvider 스크립트에 Newtonsoft JSON을 포함 할 수 없습니다.

분류에서Dev

내 스크립트를 실행할 수 없습니다.

분류에서Dev

내 자바 스크립트를로드 할 수 없습니다.

분류에서Dev

스냅 내에서 스크립트를 노출 할 수 없습니다.

분류에서Dev

컨텍스트 후크 내에서 함수를 호출 할 수 없습니다.

분류에서Dev

gem 안에 Bash 스크립트를 포함 할 수 있습니까?

분류에서Dev

다른 클래스의 함수에서 자바 스크립트를 호출 할 수 없습니다.

분류에서Dev

내 패키지에서 스크립트를 실행할 수 없습니다.

분류에서Dev

내 패키지에서 스크립트를 실행할 수 없습니다.

분류에서Dev

Windows는 Eclipse 내에서 Python 스크립트를 실행할 수 없습니다.

분류에서Dev

rc.local 내에서 스크립트를 실행할 수 없습니다.

분류에서Dev

/ 중에 Bash 스크립트를 실행할 수 없습니다.

분류에서Dev

스크립트를 iframe에 격리 할 수 없습니다.

분류에서Dev

bspwmrc에서 스크립트를 시작할 수 없습니다.

분류에서Dev

iframe에 스크립트를로드 할 수 없습니다.

분류에서Dev

포함 된 PHP 스크립트에서 변수에 액세스 할 수 없습니다.

분류에서Dev

자바 스크립트는 함수간에 매개 변수를 전달할 수 없습니다.

분류에서Dev

자바 스크립트에서 함수 외부의 변수를 사용할 수 없습니다.

분류에서Dev

Powershell의 변수를 함수에서 스크립트로 전달할 수 없습니다.

분류에서Dev

angular-cli에 포함 된 스크립트를 다른 곳에서 선언 할 수 있습니까?

분류에서Dev

포인트 카운터 스크립트에 코드를 추가 할 수 없습니다.

분류에서Dev

동적으로 생성 된 HTML에서 자바 스크립트 함수를 호출 할 수 없습니다.

분류에서Dev

Phonegap에서 네이티브 자바 스크립트 배열 함수를 사용할 수 없습니다.

분류에서Dev

외부 자바 스크립트 파일에서 함수를 호출 할 수 없습니다.

Related 관련 기사

  1. 1

    다른 함수 자바 스크립트 내에서 함수를 호출 할 수 없습니다.

  2. 2

    함수 내에서 스크립트 범위 변수를 수정할 수 없습니다.

  3. 3

    JavaScript에 innerHTML이 포함 된 인라인 스크립트를 리팩터링 할 수 없습니다.

  4. 4

    자바 스크립트는 함수 내에서 전역 개체를 재정의 할 수 없습니다.

  5. 5

    BASH 스크립트의 함수 내부에서 호출 할 때 SUDO를 찾을 수 없습니다.

  6. 6

    CSharpCodeProvider 스크립트에 Newtonsoft JSON을 포함 할 수 없습니다.

  7. 7

    내 스크립트를 실행할 수 없습니다.

  8. 8

    내 자바 스크립트를로드 할 수 없습니다.

  9. 9

    스냅 내에서 스크립트를 노출 할 수 없습니다.

  10. 10

    컨텍스트 후크 내에서 함수를 호출 할 수 없습니다.

  11. 11

    gem 안에 Bash 스크립트를 포함 할 수 있습니까?

  12. 12

    다른 클래스의 함수에서 자바 스크립트를 호출 할 수 없습니다.

  13. 13

    내 패키지에서 스크립트를 실행할 수 없습니다.

  14. 14

    내 패키지에서 스크립트를 실행할 수 없습니다.

  15. 15

    Windows는 Eclipse 내에서 Python 스크립트를 실행할 수 없습니다.

  16. 16

    rc.local 내에서 스크립트를 실행할 수 없습니다.

  17. 17

    / 중에 Bash 스크립트를 실행할 수 없습니다.

  18. 18

    스크립트를 iframe에 격리 할 수 없습니다.

  19. 19

    bspwmrc에서 스크립트를 시작할 수 없습니다.

  20. 20

    iframe에 스크립트를로드 할 수 없습니다.

  21. 21

    포함 된 PHP 스크립트에서 변수에 액세스 할 수 없습니다.

  22. 22

    자바 스크립트는 함수간에 매개 변수를 전달할 수 없습니다.

  23. 23

    자바 스크립트에서 함수 외부의 변수를 사용할 수 없습니다.

  24. 24

    Powershell의 변수를 함수에서 스크립트로 전달할 수 없습니다.

  25. 25

    angular-cli에 포함 된 스크립트를 다른 곳에서 선언 할 수 있습니까?

  26. 26

    포인트 카운터 스크립트에 코드를 추가 할 수 없습니다.

  27. 27

    동적으로 생성 된 HTML에서 자바 스크립트 함수를 호출 할 수 없습니다.

  28. 28

    Phonegap에서 네이티브 자바 스크립트 배열 함수를 사용할 수 없습니다.

  29. 29

    외부 자바 스크립트 파일에서 함수를 호출 할 수 없습니다.

뜨겁다태그

보관