我正在尝试用mingw
在linux上构建我的c++
CMake
项目。CMakeLists.txt包含(为了便于理解):
- 设置项目信息:
project(<project name> LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
- 设置
TRY_COMPILE
目标类型:
set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
- 设置
boost
:
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost COMPONENTS system program_options REQUIRED)
- 包括其中没有关于
mingw
的任何内容的子目录:
add_subdirectory(<some_subdirectory>)
...
在构建过程中,我在日志中看到以下编译命令:
/usr/bin/x86_64-w64-mingw32-g++ -I/usr/include -I<user include 1> -I<user include 2> -O3 -DNDEBUG -std=gnu++20 -MD -MT CMakeFiles/common.dir/<source>.cpp.o -MF <source>.cpp.o.d -o <source>.cpp.o -c <project path>/<source>.cpp
之后会出现一条编译器错误消息,开头如下:
[build] In file included from /usr/x86_64-w64-mingw32/include/c++/12.2.0/cstdint:41,
[build] from /usr/x86_64-w64-mingw32/include/c++/12.2.0/bits/char_traits.h:731,
[build] from /usr/x86_64-w64-mingw32/include/c++/12.2.0/ios:40,
[build] from /usr/x86_64-w64-mingw32/include/c++/12.2.0/ostream:38,
[build] from <project path>/<source>.hpp:5,
[build] from <project path>/<source>.cpp:1:
[build] /usr/include/stdint.h:90:33: error: conflicting declaration «typedef long unsigned int uintptr_t»
[build] 90 | typedef unsigned long int uintptr_t;
[build] | ^~~~~~~~~
...
根据互联网,这个错误消息与不同的mingw
标准库实现有关。我猜在一个编译命令中,在一个编译命令中,-I/usr/include
的位置上应该有-I/usr/x86_64-w64-mingw32/include
。如果我是正确的,问题是“如何为mingw
构建特别地更改标准包含目录?"。如果我不是正确的,那么如何解决项目建设的问题呢?
PS:该项目使用clang++
和g++
进行构建。
1条答案
按热度按时间csbfibhn1#
您可能需要一个toolchain file用于交叉编译器。
但是我建议使用quasi-msys2,它可以处理这个问题,并且还允许您访问MinGW的预构建库(在您的情况下是Boost)。