Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 支持本机和强制32位构建的正确方法_Cmake - Fatal编程技术网

Cmake 支持本机和强制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

我希望能够为本机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(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没有类似的东西,我会感到惊讶。