【发布时间】:2015-03-26 19:59:37
【问题描述】:
在 C++ 中有预定义的宏:
#if defined(_M_X64) || defined(__amd64__)
// Building for 64bit target
const unsigned long MaxGulpSize = 1048576 * 128;// megabyte = 1048576;
const unsigned long MaxRecsCopy = 1048576 * 16;
#else
const unsigned long MaxGulpSize = 1048576 * 8;// megabyte = 1048576;
const unsigned long MaxRecsCopy = 1048576;
#endif
这允许我设置常量来控制将使用的内存量。
我当然可以逐字定义预处理器变量:
#define Is64bit 1
using System;
using System.Collections.Generic;
-稍后-
#if Is64bit
// Building for 64bit target
const long MaxGulpSize = 1048576 * 128;// megabyte = 1048576;
const long MaxRecsCopy = 1048576 * 16;
#else
const long MaxGulpSize = 1048576 * 8;// megabyte = 1048576;
const long MaxRecsCopy = 1048576;
#endif
我找不到基于配置管理器中设置的值来检测平台的方法,这将允许命令行构建:
set de=C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe
set sol=E:\Some\Path\to\my.sln
"%de%" %sol% /build "Release|x86"
"%de%" %sol% /build "Release|x64"
有没有办法检测到这一点,还是我必须构建、更改平台并再次构建?
更新:当最后一个 32 位 Windows 7 工作站退役时,32/64 位问题成为一个有争议的问题,因此不再需要为这两个平台进行编译。我认为保留此线程是值得的,因为这些概念可以帮助其他预处理器指令,例如针对 MS Office 与 Open Office。
【问题讨论】:
-
你考虑过使用条件编译符号吗?可以根据目标平台在您的项目中设置它们。
-
谢谢@QualityCatalyst,它们是自动的还是我必须设置它们?是否有设置了哪些条件符号的列表?
-
您必须在配置中设置它们。配置非常开放,不在乎你定义什么。
-
还要注意从@QualityCatalyst 喜欢的答案中“删除任何” - 因为“任何”可执行文件,尤其是类库可以在两个 x86/x64 进程中加载,你不能真正定义常量它...
标签: c# 32bit-64bit preprocessor-directive