gcc/g 定义的替代方案
gcc/g++ alternative to defines
我正在为我的项目使用cmake构建系统。
我希望我的程序可以始终了解项目目录,我以为我可以设置一个环境变量并使用:
getenv("MYPROJDIR")
,但我不想在整个系统上创建一个持久变量,并且我不想在执行程序之前每次手动创建一个临时变量。
是否可以在构建时间设置一些变量,以便我的源知道项目目录,并且可以相对于该目录访问输入文件,而不管位置执行的位置如何。
。我可以使用-D开关或:
使用定义add_definitions(-DMYPROJDIR=${PROJECT_SOURCE_DIR})
,但我听说人们说除非绝对必要,否则人们说不要使用宏。
总的来说,我需要这种娱乐性:
const string defaultinput = MYPROJDIR + "src/someinputdata.dat"
ifstream myfile(defaultinput)
,但我听说人们说除非绝对 必要。
即使那是真的,我不会说使用-D
开关是宏。
使用-D
开关恰恰是为此,将构建时间变量添加到您的代码中。这是您似乎想要的。
定义的替代方法取决于您的用例。构建/编译时间的最明显替代方法是运行时间决策。
,就您而言,我认为将通往程序目的地的绝对路径本身放入您的程序本身是一个好主意(请参阅@Sergeya评论)。
我会推荐以下两个运行时解决方案之一:
-
如果这确实是需要成为应用程序的一部分的数据(硬编码1:1关系),那么我可能会直接将
src/someinputdata.dat
的内容编译到您的程序中- c/c ,您可以#include一个文件字符串吗?
- 用cmake在标题中烘烤二进制
-
通过某些程序代码获取可执行文件的路径
- 如何获取程序路径
- 我如何获得程序正在运行的目录?
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- C++ 定义继承方案
- 为什么 std::memcpy(作为类型双关语的替代方案)不会导致未定义的行为?
- 此真实路径定义的跨平台替代方案?
- 使用自定义深度测试的深度打击解决方案
- 用于在 Visual Studio 中为整个项目或解决方案定义带有参数的预处理器宏的选项
- 错误的LNK2005已定义为将C /Fortran解决方案更新为VS 2013
- 使用解决方案上的msbuild来调用某些项目上的自定义目标
- gcc/g 定义的替代方案
- Visual Studio中的解决方案范围定义
- 静态库中未定义的符号,但在同一 VS 解决方案中存在
- 编译的 exe 无法通过我的自定义方案 cmd 运行?
- 为多语言解决方案定义多个预处理器常量
- 命令行应用程序的自定义URL方案
- OpenGL GLEW的替代品,定义了参数或解决方案
- 可以定义在系统范围内使用的自定义URI方案
- Visual Studio 2010 找不到除解决方案的局部变量之外的任何内容的定义
- 将此自定义回合转换为数学更友好的解决方案
- 转到原始解决方案中复制的解决方案中的定义搜索