在Linux和Windows上构建良好。
但在macos我得到:
/usr/local/bin/g++-11 -isysroot /Applications/Xcode_13.4.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.3.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/Calculator_Test.dir/src/speedtest.cpp.o CMakeFiles/Calculator_Test.dir/src/tests.cpp.o -o Calculator_Test ../libCalculator.a ../vcpkg_installed/x64-osx/debug/lib/libCatch2d.a ../vcpkg_installed/x64-osx/debug/lib/manual-link/libCatch2Maind.a ../vcpkg_installed/x64-osx/debug/lib/libCatch2d.a
Undefined symbols for architecture x86_64:
"__ZN5Catch24translateActiveExceptionB5cxx11Ev", referenced from:
__ZN5Catch9Benchmark9Benchmark3runINSt6chrono3_V212steady_clockEEEvv in speedtest.cpp.o
"__ZN5Catch9Benchmark6Detail15analyse_samplesEdjN9__gnu_cxx17__normal_iteratorIPdSt6vectorIdSaIdEEEES8_", referenced from:
__ZN5Catch9Benchmark6Detail7analyseINSt6chrono8durationIdSt5ratioILl1ELl1000000000EEEEN9__gnu_cxx17__normal_iteratorIPS7_St6vectorIS7_SaIS7_EEEEEENS0_14SampleAnalysisIT_EERKNS_7IConfigENS0_11EnvironmentISG_EET0_SN_ in speedtest.cpp.o
运行以下程序运行良好且没有错误:
cmake --preset=${{ matrix.preset }} -B build -DCalculator_Test=1 -DCMAKE_C_COMPILER=gcc-11 -DCMAKE_CXX_COMPILER=g++-11 -DCMAKE_VERBOSE_MAKEFILE=1
"预设";只是将CMAKE_TOOLCHAIN_FILE设置为vcpkg提供的CMAKE_;Unix Makefiles";
来自使用的CMakeLists.txt:
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
...
find_package(Catch2 CONFIG REQUIRED)
target_link_libraries(Calculator_Test
PRIVATE
Calculator
Catch2::Catch2 Catch2::Catch2WithMain
)
但是当编译失败时
cmake --build build
我的问题是它为什么会失败,以及如何修复它?
是C++20出了问题,还是CMake、vcpkg或我必须在macos上做的事情。我不是macos专家:(
通过在设置vcpkg之前将环境变量设置为正确的编译器来解决问题。
在github操作yml文件中:
- name: Set C++/C compiler on macOs
shell: bash
run: echo "CC=gcc-11" >> $GITHUB_ENV; echo "CXX=g++-11" >> $GITHUB_ENV; cat "$GITHUB_ENV"
if: runner.os == 'macOs'
构建步骤(不指定c/c++编译器(:
cmake --preset=${{ matrix.preset }} -B build -DCalculator_Test=1 -DCMAKE_VERBOSE_MAKEFILE=1
我的假设是,依赖二进制文件的链接早些时候失败了,因为使用的编译器与应用程序本身不同。