我可以设置visual studio 2005命令行开关在我的代码(即通过pragma/define)
Can I set visual studio 2005 command line switches in my code (ie through pragma/define)?
我知道您可以在项目属性中提供命令行或添加开关,但您可以从源文件中做到这一点吗?我需要为某些源文件设置某些开关,而无需进入项目属性并每次手动执行。所以也许你可以用c++源文件中的预处理器来做?
有一些#pragma可以,例如,改变代码块的代码生成/优化,但我认为这是相当有限的事情。
第一:编译/链接不执行你的c++代码。所以你不能写一段c++代码,然后根据一些c++条件(比如if/else/…)做出决定(改变这个项目的一些项目设置)。
#pragma
和#defines
是预处理器指令,您已经知道。虽然编译器可以理解#pragmas
,但是编程能力是有限的,而且通常是编译器特有的。
它们的一个常见用途是使代码与平台无关。
回答你原来的问题"我如何以编程方式修改项目属性(不是手动)?":你可以用#pragmas
&#defines
(甚至是有条件的)在你的代码中控制各种设置。通常支持是特定于编译器供应商的,所以除非你非常小心,否则你的代码很可能无法移植(跨编译器)。
在我的GCC中,我总是发现c++config.h是各种cpp指令的一个很好的例子。在我的windows电脑上,它安装在X:MinGWlibgccmingw324.5.2includec++mingw32bitsc++config.h
查找支持的cpp指令,编译器的RTM。
另一个选项显然是写shell/perl/…脚本修改项目设置/Makefiles。我建议这样做,而不是让自己纠结于cpp指令。:)
当然,这个选项会在编译之前改变的设置,而不是在编译期间改变的设置。但如果这对你来说不是问题,那就使用这个而不是cpp指令。如前所述,#pragma
语句是非常特定于供应商的。对于Visual Studio 2005,请看这里支持的#pragma
语句:Pragma指令
我也会与kashyap关于编写一个脚本来修改每个文件的项目设置,原因如下:
- 如果你必须添加或更改设置,有一个地方可以修改。
- 因为只有一个地方可以查看,所以未来的维护者知道在哪里可以找到给定文件的特殊设置。他们不会对隐藏在项目设置对话框深处的手动设置感到惊讶。
- 与C代码相比,为什么C++代码不需要"#define _POSIX_C_SOURCE 200809L"?
- 以下 C++ 代码用于 -> "#define idiv(a, b) (((a) + (b) / 2) / (b))" 是什么?
- 如何以静态代码分析友好的方式使用 #define 防护?
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- #pragma 包(1)会导致分段错误
- C++相当于整数的 #define
- 禁止显示有关包含文件中 #pragma 包的警告
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 编译时检查 #pragma 包的使用情况
- 我们可以用 C 语言嵌套 #define 和 #if 吗?
- 如何将旧的 C 样式 #define 映射与现代C++进行调整?
- OpenMP #pragma omp for v/s #pragma omp parallel for 之间的区别?
- 找不到 #define 的函数定义
- "#define X X"是什么意思?
- #pragma(*诊断)当将Clang分析器与GCC编译器混合时
- 使用 constexpr 替换 #define 和 #ifdef 进行条件编译
- 野牛/flex:计算器将双精度值解释为整数,所以我添加了 YYSTYPE 双精度 #define 但我有多个编译错误
- 使用 #pragma message() 打印编译期间 #define 的完整评估结果
- 我可以设置visual studio 2005命令行开关在我的代码(即通过pragma/define)