Я хочу распространять как файл данных, так и программу, написанную на C, которая открывает файл данных, а затем закрывает его и делает его переносимым.Исходный код программы будет выглядеть примерно так:
#include <stdio.h>
int main(int argc, char** argv)
{
fclose(fopen("data.dat", "rb"));
return 0;
}
Я также использую Autotools:
$ ls -R
.:
configure.ac
dat
Makefile.am
src
./dat:
data.dat
Makefile.am
./src:
hello.c
Makefile.am
В Linux при установке программного обеспечения файлы обычно идут в определенные каталоги, например, helloПерейдите в / usr / local / bin, а data.dat будет в / usr / local / share, и установщик может настроить эти каталоги.Поэтому программу необходимо будет адаптировать к изменению пути к файлу данных, в частности к переменной datadir.
#src/Makefile.am
AM_CPPFLAGS=-DDATADIR='"$(datadir)"'
...
.
//src/hello.c
...
fclose(fopen(DATADIR "/data.dat", "rb+"));
...
Однако в Windows программное обеспечение неустанавливается таким образом, и все различные файлы обычно устанавливаются в один каталог.Чтобы сделать это, bindir и datadir могут быть выполнены для / при запуске configure, однако это сделает аргумент fopen недействительным.
Есть ли способ настроить мои настройки так, чтобы программа ссылалась на правильный путьбез использования #ifdefs?