我正在为我的项目使用CMake构建系统。gcc/g ++替代定义
我希望我的可执行程序,以了解项目目录在任何时候, 我以为我可以设置环境变量和使用:
getenv("MYPROJDIR")
但我不希望创建跨持久变量系统,并且我不想每次在执行我的程序之前手动创建一个临时变量。
是否有一种方法可以在构建时设置一些变量,以便我的源知道项目目录,并且可以访问与该目录相关的输入文件,而不管它执行的位置。
我可以用一个与-D开关定义或:
add_definitions(-DMYPROJDIR=${PROJECT_SOURCE_DIR})
,但我听到有人说不能使用宏,除非绝对必要的。
总的来说,我需要这个funtionality:
const string defaultinput = MYPROJDIR + "src/someinputdata.dat"
ifstream myfile(defaultinput)
你的情况,你可以在一些资源的配置文件与不同对名,值。并放置你想要的项目目录。另一种可能性是将此路径作为参数传递给您的应用程序 – johngull
宏在这里并不是一个坏主意。但是如果你想要更多的灵活性,你可以在运行时查找可执行文件的路径,并加载你的数据文件。这意味着你可以将两个目录都移动到另一个目录并保持工作。 – Olivier
确实是一个糟糕的主意。将应用程序部署或复制到其他计算机时,您会做什么?它如何知道如何访问这台新机器上的文件? – SergeyA