Начнем с CMake. Каждый раз, когда я пытаюсь создать общие библиотеки через командную строку или приложение cmake, я получаю одну и ту же ошибку:
The C compiler identification is unknown
The CXX compiler identification is unknown
Detecting C compiler ABI info
Detecting C compiler ABI info - failed
Check for working C compiler: C:/msys64/mingw64/bin/gcc.exe
Check for working C compiler: C:/msys64/mingw64/bin/gcc.exe - broken
CMake Error at C:/Program Files/CMake/share/cmake-3.30/Modules/CMakeTestCCompiler.cmake:67 (message):
The C compiler
"C:/msys64/mingw64/bin/gcc.exe"
is not able to compile a simple test program.
It fails with the following output:
Change Dir: 'C:/Users/Exspiravit/Desktop/Sudoku/build/CMakeFiles/CMakeScratch/TryCompile-d79xak'
Run Build Command(s): "C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/MSBuild/Current/Bin/amd64/MSBuild.exe" cmTC_d902b.vcxproj /p:Configuration=Debug /p:Platform=x64 /p:VisualStudioVersion=17.0 /v:n
MSBuild version 17.10.4+10fbfbf2e for .NET Framework
Build started 16/8/2024 11:01:50 ΞΌΞΌ.
Project "C:\Users\Exspiravit\Desktop\Sudoku\build\CMakeFiles\CMakeScratch\TryCompile-d79xak\cmTC_d902b.vcxproj" on node 1 (default targets).
PrepareForBuild:
Creating directory "cmTC_d902b.dir\Debug\".
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Microsoft\VC\v170\Microsoft.CppBuild.targets(513,5): warning MSB8003: The WindowsSDKDir property is not defined. Some build tools may not be found. [C:\Users\Exspiravit\Desktop\Sudoku\build\CMakeFiles\CMakeScratch\TryCompile-d79xak\cmTC_d902b.vcxproj]
Structured output is enabled. The formatting of compiler diagnostics will reflect the error hierarchy. See https://aka.ms/cpp/structured-output for more details.
Creating directory "C:\Users\Exspiravit\Desktop\Sudoku\build\CMakeFiles\CMakeScratch\TryCompile-d79xak\Debug\".
Creating directory "cmTC_d902b.dir\Debug\cmTC_d902b.tlog\".
InitializeBuildStatus:
Creating "cmTC_d902b.dir\Debug\cmTC_d902b.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
Touching "cmTC_d902b.dir\Debug\cmTC_d902b.tlog\unsuccessfulbuild".
ClCompile:
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.40.33807\bin\HostX64\x64\CL.exe /c /W1 /WX- /diagnostics:column /D _MBCS /D "CMAKE_INTDIR=\"Debug\"" /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"cmTC_d902b.dir\Debug\\" /Fd"cmTC_d902b.dir\Debug\vc143.pdb" /external:W1 /Gd /TC /errorReport:queue "C:\Users\Exspiravit\Desktop\Sudoku\build\CMakeFiles\CMakeScratch\TryCompile-d79xak\testCCompiler.c"
Microsoft (R) C/C++ Optimizing Compiler Version 19.40.33812 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
cl /c /W1 /WX- /diagnostics:column /D _MBCS /D "CMAKE_INTDIR=\"Debug\"" /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"cmTC_d902b.dir\Debug\\" /Fd"cmTC_d902b.dir\Debug\vc143.pdb" /external:W1 /Gd /TC /errorReport:queue "C:\Users\Exspiravit\Desktop\Sudoku\build\CMakeFiles\CMakeScratch\TryCompile-d79xak\testCCompiler.c"
testCCompiler.c
Link:
C:\msys64\mingw64\bin\ld.exe /ERRORREPORT:QUEUE /OUT:"C:\Users\Exspiravit\Desktop\Sudoku\build\CMakeFiles\CMakeScratch\TryCompile-d79xak\Debug\cmTC_d902b.exe" /INCREMENTAL /ILK:"cmTC_d902b.dir\Debug\cmTC_d902b.ilk" /NOLOGO /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /PDB:"C:/Users/Exspiravit/Desktop/Sudoku/build/CMakeFiles/CMakeScratch/TryCompile-d79xak/Debug/cmTC_d902b.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:/Users/Exspiravit/Desktop/Sudoku/build/CMakeFiles/CMakeScratch/TryCompile-d79xak/Debug/cmTC_d902b.lib" /MACHINE:X64 cmTC_d902b.dir\Debug\testCCompiler.obj
C:\msys64\mingw64\bin\ld.exe: cannot find /ERRORREPORT:QUEUE: No such file or directory
C:\msys64\mingw64\bin\ld.exe: cannot find Β β– /: No such file or directory
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(1151,5): error MSB6006: "C:\msys64\mingw64\bin\ld.exe" exited with code 1. [C:\Users\Exspiravit\Desktop\Sudoku\build\CMakeFiles\CMakeScratch\TryCompile-d79xak\cmTC_d902b.vcxproj]
Done Building Project "C:\Users\Exspiravit\Desktop\Sudoku\build\CMakeFiles\CMakeScratch\TryCompile-d79xak\cmTC_d902b.vcxproj" (default targets) -- FAILED.
Build FAILED.
"C:\Users\Exspiravit\Desktop\Sudoku\build\CMakeFiles\CMakeScratch\TryCompile-d79xak\cmTC_d902b.vcxproj" (default target) (1) ->
(PrepareForBuild target) ->
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Microsoft\VC\v170\Microsoft.CppBuild.targets(513,5): warning MSB8003: The WindowsSDKDir property is not defined. Some build tools may not be found. [C:\Users\Exspiravit\Desktop\Sudoku\build\CMakeFiles\CMakeScratch\TryCompile-d79xak\cmTC_d902b.vcxproj]
"C:\Users\Exspiravit\Desktop\Sudoku\build\CMakeFiles\CMakeScratch\TryCompile-d79xak\cmTC_d902b.vcxproj" (default target) (1) ->
(Link target) ->
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(1151,5): error MSB6006: "C:\msys64\mingw64\bin\ld.exe" exited with code 1. [C:\Users\Exspiravit\Desktop\Sudoku\build\CMakeFiles\CMakeScratch\TryCompile-d79xak\cmTC_d902b.vcxproj]
1 Warning(s)
1 Error(s)
Time Elapsed 00:00:00.98
CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
CMakeLists.txt:10 (project)
Configuring incomplete, errors occurred!
Также вот CMakeLists.txt, который я использую сейчас:
cmake_minimum_required(VERSION 3.30)
set(CMAKE_C_COMPILER "C:/msys64/mingw64/bin/gcc.exe")
set(CMAKE_CXX_COMPILER "C:/msys64/mingw64/bin/g++.exe")
set(CMAKE_LINKER "C:/msys64/mingw64/bin/ld.exe")
project(SudokuProject)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
include_directories(${CMAKE_SOURCE_DIR}/include)
file(GLOB GEN_SOURCES "src/gen.cpp")
file(GLOB CHECK_SOURCES "src/check.cpp")
file(GLOB LOGGER_SOURCES "src/logger.cpp")
file(GLOB WRAPPER_SOURCES "src/wrapper.cpp")
add_library(gen SHARED ${GEN_SOURCES})
add_library(check SHARED ${CHECK_SOURCES})
add_library(logger SHARED ${LOGGER_SOURCES})
add_library(wrapper MODULE ${WRAPPER_SOURCES})
target_include_directories(wrapper PRIVATE ${CMAKE_SOURCE_DIR}/include)
find_package(Python3 REQUIRED COMPONENTS Development)
target_include_directories(wrapper PRIVATE ${Python3_INCLUDE_DIRS})
target_link_libraries(wrapper PRIVATE ${Python3_LIBRARIES})
target_include_directories(gen PRIVATE ${CMAKE_SOURCE_DIR}/include)
target_include_directories(check PRIVATE ${CMAKE_SOURCE_DIR}/include)
target_include_directories(logger PRIVATE ${CMAKE_SOURCE_DIR}/include)
target_link_libraries(gen PRIVATE logger)
target_link_libraries(check PRIVATE logger)
set_target_properties(gen PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set_target_properties(check PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set_target_properties(logger PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set_target_properties(wrapper PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
Теперь давайте поговорим о pybind11. По какой-то причине я получаю сообщение об ошибке #include <pybind11/pybind11.h>, в котором говорится, что невозможно открыть исходный файл Python.h.
Что касается CMake, я изначально установил его с веб-сайта, и после того, как я создал CMakeLists.txt, я попытался создать библиотеки с помощью Windows CMD, а затем получил ошибку, но я подумал, что это как-то связано с CMakeLists.txt, потому что это Я впервые использовал cmake и не знаю, как он работает, я думал, что сделал что-то не так с текстовым файлом. Затем я попытался найти способ исправить CMakeLists.txt, но потом подумал, что он не покажет мне эту ошибку и, в частности, начальную часть ошибки, в которой идентификация компилятора неизвестна, но точная строка, в которой возникает проблема, поэтому я пытался это найти. После этого я решил удалить его и установить с помощью msys64 (поскольку именно так я устанавливал компиляторы C/C++), и, конечно же, проблема заключалась в том, что я проверил %PATH% и не нашел там проблемы, я попробовал приложение cmake на этот раз я нажимаю «Создать» и та же проблема, я удалил его, потому что после некоторого поиска я прочитал, что кто-то сказал, что установка его с mingw, а не с исходного веб-сайта, создает подобные проблемы, и я попробовал еще раз как с приложением, так и с командной строкой, то же самое Затем я попытался указать компиляторы с помощью приложения, та же проблема.
Теперь о pybind11, кроме #include <pybind11/pybind11.h>
я тоже использую #include <pybind11/stl.h>
и у них обоих была одна и та же ошибка. В первый раз я установил его с помощью pip install, но после небольшого количества проб и ошибок я решил установить его с помощью mingw64, и ошибка для второго заголовка была исправлена, но после этого я не нашел способа решить проблему.
Теперь я только что уперся в стену и не могу продолжить проект, вероятно, из-за моего невежества, потому что я впервые использую их оба и хочу выяснить, в чем проблема, а также IDE, которую я использую, - VSC, не знаю, связано ли это как-то с ошибками, но на данный момент это может быть что угодно.
Какой генератор вы используете (cmake -G ???
)
@3CxEZiVlQ, спасибо, но есть ли какая-то реальная разница, если я установлю его с помощью msys2 или с веб-сайта?
@DmytroOvdiienko Я не использую какой-либо конкретный генератор, кроме сборки mkdir, сборки cd make ... но попробую cmake -G, не знал, что он существует, пока вы его не набрали
@ΑθανάσιοςΚολτσίδης Думаю, в твоем случае так и должно быть -G Unix Makefiles
В журналах написано, что CMake не смог обнаружить работающий компилятор. Если вы хотите использовать компилятор Microsoft Visual Studio, запустите окно терминала Visual Studio с предварительно настроенными переменными среды: Инструменты -> Командная строка -> Командная строка разработчика.
Кроме того, убедитесь, что у вас установлен Windows SDK с помощью установщика Visual Studio — в журналах указано The WindowsSDKDir property is not defined. Some build tools may not be found
. Это может быть связано с тем, что переменные среды не установлены (см. пункт выше).
На самом деле это мне очень помогло, указало правильный путь, чтобы найти проблему и исправить ее для cmake, но теперь я застрял с pybind11 и не могу понять проблему.
Следуйте руководству по сборке Использование CMake в MSYS2