【发布时间】:2020-11-20 12:11:24
【问题描述】:
我有一个包含 Linux 依赖项的大型代码库,我想使用 CMake 将我的代码编译成可以在 Windows 上运行的可执行文件,即我希望 CMake 生成一个“.exe”文件或类似的东西.
我已尝试使用 CMake 网站上提供的解决方案:https://cmake.org/cmake/help/v3.4/manual/cmake-toolchains.7.html#cross-compiling 然而它并没有奏效......
这是我的 CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(myProject VERSION 1.0 LANGUAGES C CXX)
set(CMAKE_CROSSCOMPILING true)
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_SYSTEM_VERSION 10.0)
set(CMAKE_SYSTEM_PROCESSOR arm)
find_package(... *all my required packages* REQUIRED)
include(... *required include files*)
add_executable(${PROJECT_NAME} ...)
target_link_libraries(${PROJECT_NAME} ...)
它可以编译并在 Linux 上执行,但是我希望它生成一个与 Windows 兼容的可执行文件。
【问题讨论】:
-
是的,可以在 Linux 上构建 CMake 项目,并在 Windows 上使用生成的可执行文件。这称为交叉编译。交叉编译是一个相当大的话题,所以无法在 Stack Overflow 上详细描述。只需谷歌搜索“cmake cross-compile Linux Window”之类的内容,选择适合您任务的参考并遵循它。你会遇到一个具体的问题,那么你可以在这里问这个问题。
-
我已经查过了,但是提出的解决方案没有奏效。我在 CMake 的网站上使用了建议的工具链:cmake.org/cmake/help/v3.4/manual/… 但它并没有改变任何东西。我将 CMAKE_CROSSCOMPILING 设置为 true,将 CMAKE_SYSTEM_NAME 设置为 Windows,将 CMAKE_SYSTEM_VERSION 设置为 10.0
-
我也在尝试使用 mingw 在 CMake 中编译,但是我还没有让它工作。
-
描述您具体尝试了什么:您将哪些代码放入工具链文件中,您如何使用该工具链调用
cmake,您收到了哪些确切消息等. 将此描述添加到问题帖子中。 -
您似乎错误地理解了 CMake 中的工具链 是什么。这不是您需要放入
CMakeLists.txt的行。在 CMake 工具链中是一个单独的文件。确切地说,此文件应包含CMAKE_CROSSCOMPILING、CMAKE_SYSTEM_NAME等设置。工具链文件是为cmake调用指定的,并带有额外的-DCMAKE_TOOLCHAIN_FILE=path/to/file选项。