cmake编译(编译目标)x86或x64

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:

 1 SET(PROJECT_NAME dls_test)
 2 
 3 PROJECT(${PROJECT_NAME})
 4 
 5 CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
 6 
 7 #ADD_DEFINITIONS(-DUNICODE -D_UNICODE)
 8 ADD_DEFINITIONS(-D_CONSOLE)
 9 
10 
11 SET(CMAKE_MFC_FLAG 1)  #0: Use Standard Windows Libraries            1: Use MFC in a Static Library        2: Use MFC in a Shared DLL
12 
13 
14 include_directories(${PROJECT_SOURCE_DIR})
15 include_directories(${PROJECT_SOURCE_DIR}/../inc)
16 include_directories(${PROJECT_SOURCE_DIR}/../wlp_adapter)
17 include_directories(${PROJECT_SOURCE_DIR}/../include)
18 
19 LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/../lib)
20 #LINK_DIRECTORIES(${CMAKE_BINARY_DIR}/lib)
21 
22 file(GLOB SRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}  main.cpp )
23 source_group("src" FILES ${SRC})
24 
25 file(GLOB hdrs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h)
26 source_group("include" FILES ${hdrs})
27 
28 ADD_EXECUTABLE(${PROJECT_NAME}  ${SRC} ${hdrs})
29 
30 if(WIN32)
31 if(CMAKE_BUILD_TYPE MATCHES "Debug")
32   #set(OPENCV_LIB "opencv_core246d.lib" "opencv_highgui246d.lib" "opencv_imgproc246d.lib" IlmImfd.lib Comctl32.lib)
33   TARGET_LINK_LIBRARIES(${PROJECT_NAME} wlp_adapter.lib hal.lib cbs.lib libglog_staticd.lib )
34 else()
35     TARGET_LINK_LIBRARIES(${PROJECT_NAME} wlp_adapter.lib hal.lib cbs.lib libglog_static.lib )
36 endif()
37 
38 
39 set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "/SUBSYSTEM:CONSOLE") 
40 
41 else()
42 
43    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)
44 
45 endif()
46 
47 if(WIN32)
48 else()
49   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}   -std=c++0x  -fPIC ")
50 endif()
51   
52 set(CompilerFlags
53         CMAKE_CXX_FLAGS
54         CMAKE_CXX_FLAGS_DEBUG
55         CMAKE_CXX_FLAGS_RELEASE
56         CMAKE_C_FLAGS
57         CMAKE_C_FLAGS_DEBUG
58         CMAKE_C_FLAGS_RELEASE
59         )
60 foreach(CompilerFlag ${CompilerFlags})
61   string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
62   string(REPLACE "/Ob0" "" ${CompilerFlag} "${${CompilerFlag}}")
63   string(REPLACE "/TC" "" ${CompilerFlag} "${${CompilerFlag}}")
64 endforeach()
65 
66 
67 INSTALL(TARGETS ${prj_name}
68     RUNTIME DESTINATION bin
69     LIBRARY DESTINATION lib
70     ARCHIVE DESTINATION lib
71 )
72 
73 install(DIRECTORY ${PROJECT_SOURCE_DIR}
74     DESTINATION "."
75     )
View Code

 

 

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值