我处于交叉编译环境中,我的项目需要针对 Linux、Windows 和自定义目标进行编译,而自定义目标在 Windows 上进行交叉编译。
该项目使用 googletest 进行单元测试,并在 CMake 查找文件中包含以下内容:
# FindGTest.cmake
if (CMAKE_SYSTEM_NAME STREQUAL "TheTarget")
FetchContent_Declare(
GTest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG v1.14.0)
FetchContent_MakeAvailable(GTest)
else()
find_package(GTest CONFIG REQUIRED)
endif()
Windows 和 Linux 版本未进行交叉编译,并且编译良好。但对于自定义目标,我收到以下编译错误(为便于阅读进行了编辑):
C:/dev/project/build/_deps/gtest-src/googletest/include\gtest/internal/gtest-port.h:2058:38: error: use of undeclared identifier 'isatty'
...
C:/dev/project/build/_deps/gtest-src/googletest/include\gtest/internal/gtest-port.h:2087:44: error: use of undeclared identifier 'chdir'
...
C:/dev/project/build/_deps/gtest-src/googletest/include\gtest/internal/gtest-port.h:2135:10: error: use of undeclared identifier 'getenv'; did you mean 'GetEnv'?
...
C:/dev/project/_deps/gtest-src/googletest\src/gtest-death-test.cc:1106:27: error: use of undeclared identifier 'pipe'
...
C:/dev/project/build/_deps/gtest-src/googletest\src/gtest-death-test.cc:1119:27: error: use of undeclared identifier 'fork'
...
C:/dev/project/build/_deps/gtest-src/googletest\src/gtest-death-test.cc:1204:3: error: use of undeclared identifier 'execv'
...
C:/dev/project/build/_deps/gtest-src/googletest\src/gtest-filepath.cc:115:18: error: use of undeclared identifier 'getcwd'
如何解决交叉编译目标的这些编译错误?
有没有办法通过为构建提供正确的宏组合(例如使用 CMakeadd_definition()
语句)来实现这一点?
或者我必须创建 gtest 的自定义版本?也就是说,我想这意味着我不应该使用FetchContent_Declare()
/FetchContent_MakeAvailable()
或find_package()
包含 googletest,而是应该将 googletest 作为我的项目的子目录,可能需要更改代码来解决未定义函数的使用问题(?)