【发布时间】:2014-09-09 15:46:59
【问题描述】:
让我解释一下这个问题。我有一个 C 代码,其中附加插件的搜索路径包含在 C 字符串中。只要程序留在 cmake 的构建目录中,字符串就应该包括构建目录中的插件文件夹。例如
char *plugindir = "/home/.../myproject/build/plugins:/usr/share/myproject/plugins";
如果程序是通过make install 安装的,我想将此字符串更改为
char *plugindir = "/usr/share/myproject/plugins";
并在安装之前重新编译/重新链接程序。如何使用 CMAKE 实现这种行为?
【问题讨论】:
-
硬编译路径是邪恶的。有一天,您会希望将程序移至新目录或具有不同目录结构的新机器。使用初始化文件。
-
@DoxyLover: 但是你怎么找到初始化文件呢?
-
此答案用于查找包含可执行文件的目录:stackoverflow.com/questions/1023306/…。您也可以使用环境变量。
-
在我看来,使用诸如确定自己的可执行文件名称之类的东西似乎很棘手,并且取决于平台。通常在 Linux/BSD/*nix 系统上,一旦安装程序或共享库,您通常不会移动它。
-
有时您需要硬编码路径。硬编码的路径是邪恶的。我建议尽可能减少它们的数量。理想情况下到单个配置文件。安装时重新编译是可能的,但是您是否考虑过使用 cmake 头文件生成器并链接两个不同的版本(虽然这是一个邪恶的 hack,它会困扰您多年)。