Cmake 支持本机和强制32位构建的正确方法
我希望能够为本机arch(32位或64位)编译我的项目,并且即使在64位主机上也能为32位编译它。添加一个Cmake 支持本机和强制32位构建的正确方法,cmake,Cmake,我希望能够为本机arch(32位或64位)编译我的项目,并且即使在64位主机上也能为32位编译它。添加一个选项和一堆带有编译标志的if是唯一的方法还是有更好的方法?我需要支持UNIX makefiles和NMAKefiles。使用工具链文件:这里是@malak提供的一个 # the name of the target operating system set(CMAKE_SYSTEM_NAME Linux) # which compilers to use for C and C++ set
选项
和一堆带有编译标志的if
是唯一的方法还是有更好的方法?我需要支持UNIX makefiles和NMAKefiles。使用工具链文件:这里是@malak提供的一个
# the name of the target operating system
set(CMAKE_SYSTEM_NAME Linux)
# which compilers to use for C and C++
set(CMAKE_C_COMPILER gcc)
set(CMAKE_C_FLAGS -m32)
set(CMAKE_CXX_COMPILER g++)
set(CMAKE_CXX_FLAGS -m32)
# here is the target environment located
set(CMAKE_FIND_ROOT_PATH /usr/i486-linux-gnu )
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
那么用法就是:
$ cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake /path/to/source
另外,这里有一些直接来自维基的信息
我不熟悉Nmake,但本文似乎有一些类似的信息:使用工具链文件:下面是@malak提供的一个
# the name of the target operating system
set(CMAKE_SYSTEM_NAME Linux)
# which compilers to use for C and C++
set(CMAKE_C_COMPILER gcc)
set(CMAKE_C_FLAGS -m32)
set(CMAKE_CXX_COMPILER g++)
set(CMAKE_CXX_FLAGS -m32)
# here is the target environment located
set(CMAKE_FIND_ROOT_PATH /usr/i486-linux-gnu )
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
那么用法就是:
$ cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake /path/to/source
另外,这里有一些直接来自维基的信息
我不熟悉Nmake,但这篇文章似乎有一些类似的信息:你知道cmake的工具链文件概念吗?@user3188346我没有调查过,我确实相信它是适合你的工具;)。您可以分享一些依赖于本机arch的设置示例吗?@user3188346我需要将
-m32
和不同的-march
传递给gcc,并且我需要使用稍微不同的命令来使用Visual Studio解决方案的ExternalProject\u Add
,我们只需将工具链提供给生成器并由它处理即可。同样,对于MacOS,我们在运行CMAKE时在命令行上提供CMAKE\u OSX\u体系结构。如果unix Makefiles没有类似的东西,我会感到惊讶。你知道cmake的工具链文件概念吗?@user3188346我没有调查过,我确实相信它是适合你的工具;)。您可以分享一些依赖于本机arch的设置示例吗?@user3188346我需要将-m32
和不同的-march
传递给gcc,并且我需要使用稍微不同的命令来使用Visual Studio解决方案的ExternalProject\u Add
,我们只需将工具链提供给生成器并由它处理即可。同样,对于MacOS,我们在运行CMAKE时在命令行上提供CMAKE\u OSX\u体系结构。如果unix Makefiles没有类似的东西,我会感到惊讶。