Первый: среда разработки: Windows IDE: vscode когда я использую сборку cmake
#include "fmt/format.h"
int main(int, char **)
{
fmt::print("Hello,world!\n");
}
информация об ошибке:
установить (CMAKE_VERBOSE_MAKEFILE ON)
введите сюда описание изображения
[main] 正在生成文件夹: c:/Users/syk/Desktop/c-c++/build
[build] 正在启动生成
[proc] 执行命令: chcp
[proc] 执行命令: D:\mingw64\bin\cmake.EXE --build c:/Users/syk/Desktop/c-c++/build --config Debug --target all -j 10 --
[build] D:\mingw64\bin\cmake.exe -SC:\Users\syk\Desktop\c-c++ -BC:\Users\syk\Desktop\c-c++\build --check-build-system CMakeFiles\Makefile.cmake 0
[build] D:\mingw64\bin\cmake.exe -E cmake_progress_start C:\Users\syk\Desktop\c-c++\build\CMakeFiles C:\Users\syk\Desktop\c-c++\build\\CMakeFiles\progress.marks
[build] D:/mingw64/bin/mingw32-make.exe -f CMakeFiles\Makefile2 all
[build] mingw32-make[1]: Entering directory 'C:/Users/syk/Desktop/c-c++/build'
[build] D:/mingw64/bin/mingw32-make.exe -f CMakeFiles\TestVcpkg.dir\build.make CMakeFiles/TestVcpkg.dir/depend
[build] mingw32-make[2]: Entering directory 'C:/Users/syk/Desktop/c-c++/build'
[build] D:\mingw64\bin\cmake.exe -E cmake_depends "MinGW Makefiles" C:\Users\syk\Desktop\c-c++ C:\Users\syk\Desktop\c-c++ C:\Users\syk\Desktop\c-c++\build C:\Users\syk\Desktop\c-c++\build C:\Users\syk\Desktop\c-c++\build\CMakeFiles\TestVcpkg.dir\DependInfo.cmake --color=
[build] mingw32-make[2]: Leaving directory 'C:/Users/syk/Desktop/c-c++/build'
[build] D:/mingw64/bin/mingw32-make.exe -f CMakeFiles\TestVcpkg.dir\build.make CMakeFiles/TestVcpkg.dir/build
[build] mingw32-make[2]: Entering directory 'C:/Users/syk/Desktop/c-c++/build'
[build] [ 50%] Building CXX object CMakeFiles/TestVcpkg.dir/a.cpp.obj
[build] D:\mingw64\bin\g++.exe -DFMT_SHARED @CMakeFiles/TestVcpkg.dir/includes_CXX.rsp -g /utf-8 -MD -MT CMakeFiles/TestVcpkg.dir/a.cpp.obj -MF CMakeFiles\TestVcpkg.dir\a.cpp.obj.d -o CMakeFiles\TestVcpkg.dir\a.cpp.obj -c C:\Users\syk\Desktop\c-c++\a.cpp
[build] g++.exe: warning: /utf-8: linker input file unused because linking not done
[build] g++.exe: error: /utf-8: linker input file not found: No such file or directory
[build] mingw32-make[2]: *** [CMakeFiles\TestVcpkg.dir\build.make:79: CMakeFiles/TestVcpkg.dir/a.cpp.obj] Error 1
[build] mingw32-make[2]: *** Deleting file 'CMakeFiles/TestVcpkg.dir/a.cpp.obj'
[build] mingw32-make[2]: Leaving directory 'C:/Users/syk/Desktop/c-c++/build'
[build] mingw32-make[1]: *** [CMakeFiles\Makefile2:85: CMakeFiles/TestVcpkg.dir/all] Error 2
[build] mingw32-make[1]: Leaving directory 'C:/Users/syk/Desktop/c-c++/build'
[build] mingw32-make: *** [Makefile:93: all] Error 2
[proc] 命令“D:\mingw64\bin\cmake.EXE --build c:/Users/syk/Desktop/c-c++/build --config Debug --target all -j 10 --”已退出,代码为 2
[driver] 生成完毕: 00:00:01.612
[build] 生成已完成,退出代码为 2
Мой CmakeLists.txt
:
cmake_minimum_required(VERSION 3.0)
add_executable(TestVcpkg a.cpp)
set(CMAKE_VERBOSE_MAKEFILE ON)
find_package(fmt CONFIG REQUIRED)
target_link_libraries(TestVcpkg PRIVATE fmt::fmt)
когда я использую gcc 13.1.0 x86_64-w64-mingw32, произошла ошибка но я использую комплект Visual Studio, ошибок нет и я установил cmd и powershell в utf-8
Я нашел Google и stackoverflow Я нашел эти места, не сообщают о проблеме
Также обратите внимание, что разные компиляторы имеют разные флаги и параметры. Большинство опций, используемых для MSVC, не могут использоваться для GCC или Clang, и наоборот.
Вывод показывает, что вы передаете аргумент /utf-8
в g++
:
.
D:\mingw64\bin\g++.exe -DFMT_SHARED @CMakeFiles/TestVcpkg.dir/includes_CXX.rsp -g /utf-8 -MD -MT CMakeFiles/TestVcpkg.dir/a.cpp.obj -MF CMakeFiles\TestVcpkg.dir\a.cpp.obj.d -o CMakeFiles\TestVcpkg.dir\a.cpp.obj -c C:\Users\syk\Desktop\c-c++\a.cpp
g++
не знает этого аргумента и пытается передать его на этап связывания как объектный файл, но это не удается, поскольку такого файла нет. Удалите /utf-8
из аргументов g++
.
Извините, я не знаю, как изменить /utf-8, потому что я использовал плагины cmake.
@user21947699 user21947699 Хорошо, тогда обновите свой вопрос и поместите в него файл CMakeLists.txt
, который вы используете для сборки проекта. Вы можете даже найти в нем /utf-8
в виде обычного текста, и если да, удалите его из всех определений, которые будут использоваться g++
.
я изменил это
@user21947699 user21947699 Если это действительно все в твоем CMakeLists.txt
, то что-то очень не так. Содержат ли 4 файла fmt-*.cmake
(которые прилагаются к установке fmt
) что-нибудь о Windows или utf-8? У меня этого не происходит только с этим CMakeLists.txt
файлом, он компилируется нормально. Возможно, вы получили fmt
не напрямую с github, а через какой-то репозиторий Microsoft? В этом случае они могли изменить библиотеку fmt
, чтобы она работала только с их компилятором. Кроме того, вы ранее выполняли сборку в том же каталоге, используя другой компилятор?
Я использую vcpkg, устанавливаю его
@user21947699 user21947699 Хорошо, возможно, в этом причина. Итак, содержат ли файлы fmt-*.cmake
что-нибудь о utf-8 или каких-либо других специфичных для MSVC вещах? Возможно, вам стоит просто построить fmt самостоятельно.
в fmt-targets.cmake содержатся INTERFACE_COMPILE_OPTIONS "\$<\$<COMPILE_LANGUAGE:CXX>:/utf-8>"
Я предполагаю, что это установка MSVC vcpkg, которая несовместима с mingw.
@user21947699 user21947699 Да, именно так. Это будет работать только с MSVC. Вам нужна fmt
библиотека без таких вещей. Рекомендую построить его самостоятельно.
спасибо, я безумно благодарен!
@user21947699 user21947699 Рад, что помогло! Пожалуйста!
Я использую vcpkg, устанавливаю его. Вы использовали правильный триплет для MinGW? Помните, что x86-windows*
и x64-windows*
предназначены для msvc и не должны использоваться для MinGW. У MinGW есть свои тройки: https://stackoverflow.com/questions/63031513/vcpkg-with-mingw
@ user21947699 Посмотрите информацию, добавленную drecherjm, если вы не хотите создавать ее самостоятельно.
Пожалуйста, отредактируйте свой вопрос, чтобы показать нам свой
CMakeLists.txt
файл.