if(CMAKE_CL_64)    #CMAKE的内建变量,如果是true,就说明编译器的64位的,自然可以编译64bit的程序
set(ADDRESS_MODEL 64)
set(NODE_TARGET x64)
else()
set(ADDRESS_MODEL 32)
set(NODE_TARGET x86)
endif()

看以上代码,判断下就行了

CMAKE_CL_64内建的这个变量,官方文档给出来的解释是:

Using the 64 bit compiler from Microsoft

Set to true when using the 64 bit cl compiler from Microsoft.

###############update####################

如果是GCC编译器或者其他的诸如sun Studio之类的,可以设置CFLAGS CXXFLAGS变量,加入-m32 或者-m64来编译x86或者x64的程序。

如果是windows平台下VS的project文件的话,请使用VS generator,cmake -G "Visual Studio 10 Win64"就是编译为x64,cmake -G "Visual Studio 10 "就是编译为x86.

如果是Mac OS X上,使用CMAKE_OSX_ARCHITECTURES这个CMAKE的内建变量。

  • cmake -DCMAKE_OSX_ARCHITECTURES=i386 /path/to/source/dir------编译为32位

    cmake -DCMAKE_OSX_ARCHITECTURES=x86_64 /path/to/source/dir------编译为64位

    cmake "-DCMAKE_OSX_ARCHITECTURES=x86_64;i386" /path/to/source/dir -------编译为通用8664架构和i386架构的二进制

或者可以用另外一种方式,思路是这样的,其实编译为x86或者x64,本质上都是向linker传递特定的参数。如果是VS,或者是NMake的Makefiles的话,直接使用CMAKE内建的变量CMAKE_EXE_LINKER_FLAGS,来设置链接器的参数。VS toolchain 可以这样 set(CMAKE_EXE_LINKER_FLAGS "/machine:x86")。

这个变量官方给出来的解释是:

Linker flags to be used to create executables.

These flags will be used by the linker when creating an executable.

以下是构建一个console的demo:

 SET(PROJECT_NAME dls_test)

 PROJECT(${PROJECT_NAME})

 CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

 #ADD_DEFINITIONS(-DUNICODE -D_UNICODE)
ADD_DEFINITIONS(-D_CONSOLE) SET(CMAKE_MFC_FLAG 1) #0: Use Standard Windows Libraries 1: Use MFC in a Static Library 2: Use MFC in a Shared DLL include_directories(${PROJECT_SOURCE_DIR})
include_directories(${PROJECT_SOURCE_DIR}/../inc)
include_directories(${PROJECT_SOURCE_DIR}/../wlp_adapter)
include_directories(${PROJECT_SOURCE_DIR}/../include) LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/../lib)
#LINK_DIRECTORIES(${CMAKE_BINARY_DIR}/lib) file(GLOB SRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} main.cpp )
source_group("src" FILES ${SRC}) file(GLOB hdrs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h)
source_group("include" FILES ${hdrs}) ADD_EXECUTABLE(${PROJECT_NAME} ${SRC} ${hdrs}) if(WIN32)
if(CMAKE_BUILD_TYPE MATCHES "Debug")
#set(OPENCV_LIB "opencv_core246d.lib" "opencv_highgui246d.lib" "opencv_imgproc246d.lib" IlmImfd.lib Comctl32.lib)
TARGET_LINK_LIBRARIES(${PROJECT_NAME} wlp_adapter.lib hal.lib cbs.lib libglog_staticd.lib )
else()
TARGET_LINK_LIBRARIES(${PROJECT_NAME} wlp_adapter.lib hal.lib cbs.lib libglog_static.lib )
endif() set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "/SUBSYSTEM:CONSOLE") else() TARGET_LINK_LIBRARIES(${PROJECT_NAME} wlp_adapter hal cbs glog pthread gomp rt glib-2.0 dl GL boost_system boost_filesystem boost_program_options boost_regex) endif() if(WIN32)
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -fPIC ")
endif() set(CompilerFlags
CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELEASE
CMAKE_C_FLAGS
CMAKE_C_FLAGS_DEBUG
CMAKE_C_FLAGS_RELEASE
)
foreach(CompilerFlag ${CompilerFlags})
string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
string(REPLACE "/Ob0" "" ${CompilerFlag} "${${CompilerFlag}}")
string(REPLACE "/TC" "" ${CompilerFlag} "${${CompilerFlag}}")
endforeach() INSTALL(TARGETS ${prj_name}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
) install(DIRECTORY ${PROJECT_SOURCE_DIR}
DESTINATION "."
)

reference:

http://stackoverflow.com/questions/5334095/cmake-multiarchitecture-compilation

http://blog.csdn.net/wh_xiexing/article/details/18301923

http://www.cmake.org/cmake/help/v3.0/variable/CMAKE_CL_64.html

http://www.cmake.org/cmake/help/v3.0/variable/CMAKE_EXE_LINKER_FLAGS.html

cmake编译(编译目标)x86或x64的更多相关文章

  1. .NET编译的目标平台(AnyCPU,x86,x64)

    转载:http://blog.sina.com.cn/s/blog_78b94aa301014i8r.html 今天有项目的代码收到客户的反馈,要求所有的EXE工程的目标平台全部指定成x86,而所有D ...

  2. 关于.NET编译的目标平台(AnyCPU,x86,x64)

    转载:http://blog.sina.com.cn/s/blog_78b94aa301014i8r.html 今天有项目的代码收到客户的反馈,要求所有的EXE工程的目标平台全部指定成x86,而所有D ...

  3. 关于.NET编译的目标平台(AnyCPU,x86,x64) (转)

    关于.NET编译的目标平台(AnyCPU,x86,x64)(转) 今天有项目的代码收到客户的反馈,要求所有的EXE工程的目标平台全部指定成x86,而所有DLL工程的目标平台全部指定成AnyCPU . ...

  4. .Net编译环境x86,x64,anycpu的区别

    一.定义 x86: 将程序集编译为由兼容 x86 的 32 位公共语言运行库运行. x64: 将程序集编译为由支持 AMD64 或 EM64T 指令集的计算机上的 64 位公共语言运行库运行. any ...

  5. [转]C#程序无法在64位系统上运行之.NET编译的目标平台

    今天将编译的C#的exe拷贝到测试机上(Win7_64bit),一运行就挂了,提示“stop working”,一开始怀疑测试机上没有安装.net framework框架,追究半天原来是编译的目标平台 ...

  6. 关于.net编译时目标生成平台

    x86: 将程序集编译为由兼容 x86 的 32 位公共语言运行库运行. x64: 将程序集编译为由支持 AMD64 或 EM64T 指令集的计算机上的 64 位公共语言运行库运行. anycpu:( ...

  7. AndroidStudio用Cmake方式编译NDK代码(cmake配置.a库)

    1.cmake是什么? CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C+ ...

  8. cmake 指定编译特定可执行文件

    最近进行编译项目,但是项目中有很多可执行文件:每次编译起来比较费时,下面一组代码可以指定特定的编译目标进行编译,而不用编译所有目标: #!/bin/bash # 通过传递第一个参数,表示要编译的目标: ...

  9. cmake构建时指定编译器架构(x86 or x64)

    vs2015 x64编译器为例,cmake命令如下: cmake -G "Visual Studio 14 Win64" path\to\source\dir 去掉Win64,就是 ...

随机推荐

  1. [poj 1364]King[差分约束详解(续篇)][超级源点][SPFA][Bellman-Ford]

    题意 有n个数的序列, 下标为[1.. N ], 限制条件为: 下标从 si 到 si+ni 的项求和 < 或 > ki. 一共有m个限制条件. 问是否存在满足条件的序列. 思路 转化为差 ...

  2. java.lang.ClassNotFoundException错误原因汇总

    开发java很长时间了,还经常会遇到java.lang.ClassNotFoundException这样的错误,最近又处理了一次,起初怀疑是jdk版本比class文件的编译版本低了导致了,但是运维人员 ...

  3. poj1185:炮兵阵地(状压dp)

    也算是比较基础的状压dp了,跟做过的第二道比较又稍微复杂了一点 需要记录之前两行的状态.. 统计结果也稍有不同 另外还学习了一个得到一个整数二进制位 1 的个数的位运算方法 详见代码: #includ ...

  4. WPF - 为什么不能往Library的工程中添加WPF window

    项目中添加一个Library 工程,但是却无法加入WPF window, WPF customize control. 调查了一下,发现这一切都由于Library工程中没有:ProjectTypeGu ...

  5. IEEE论文格式要求

    0.特别提示:本次会议要求各位作者根据审稿意见进行认真修改,然后经过大会主席的检查合格才允许上传IEEE eXpress,主要的目的是为了保证论文集的质量,不让论文格式出现五花八门的情况,确保会议后被 ...

  6. 真实经纬度(gps)转成百度坐标的js方法

    转:http://www.360doc.com/content/16/0320/14/18636294_543805051.shtml 结果图: <!DOCTYPE html> <h ...

  7. [RxJS] Updating Data with Scan

    You often need to update the data flowing through the stream with custom logic based on what you nee ...

  8. VMware SphereESXi上安装虚拟机

    VMware SphereESXi上安装虚拟机 创建新虚拟机 此处以CentOS为例 注意:配置上传的系统文件位置及启动项

  9. Linux 下安装oracle数据库

    原文出处       http://www.linuxidc.com/Linux/2015-02/113222.html 需要安装Oracle DataGuard,所以先要安装单台Oracle11g, ...

  10. cell的各种使用和赋值 总结

    cell可以分为:自定义cell,系统的cell ,cell的自适应,.xib的cell //第一种cell:系统cell 在 UIViewController下创建UITableView //1.0 ...