C库中的资源路径

C库中的资源路径,c,C,我正在编写一个有一些资源的小型C库(即,我希望在运行时编译的openCL代码,但我希望图像或任意文本文件也会遇到类似的问题)。我需要在运行时加载这些资源 如果资源随项目一起提供,我将能够使用argv[0]。但是,在我当前的场景中,我的资源应该与我的库一起提供。我提前知道资源文件相对于文件的位置 如何从源代码中获取资源的路径?通常的做法是,在编译库之前,在Makefile/您使用的任何构建系统中定义了某种类型的INSTALL\u PREFIX宏。然后Makefile将其作为编译器标志传递给编译器,

我正在编写一个有一些资源的小型C库(即,我希望在运行时编译的openCL代码,但我希望图像或任意文本文件也会遇到类似的问题)。我需要在运行时加载这些资源

如果资源随项目一起提供,我将能够使用
argv[0]
。但是,在我当前的场景中,我的资源应该与我的库一起提供。我提前知道资源文件相对于
文件的位置


如何从源代码中获取资源的路径?

通常的做法是,在编译库之前,在Makefile/您使用的任何构建系统中定义了某种类型的
INSTALL\u PREFIX
宏。然后Makefile将其作为编译器标志传递给编译器,以便您可以在代码中使用它(实际上,您提前知道要加载的资源的完整路径,而无需硬编码)

如果你最终要打包你的库,你可能会想使用类似或的东西(看看其他项目是如何做到的)。但对于这样简单的事情,您可以只使用一个Makefile:

生成文件:

INSTALL_PREFIX=/usr
CFLAGS=-DINSTALL_PREFIX=$(INSTALL_PREFIX)
foo.c:

FILE *f = fopen(INSTALL_PREFIX "/share/mylib/data.txt", "r");

答案将取决于操作系统和编译器-这不是语言标准所涵盖的内容。