在项目开发过程中, 需要根据路径来运行一些脚本或者程序, 开发中不适宜写死为固定的path. 这样移植code或维护都会不太便利, 比较好的做法是配置环境变量并且在code中从环境变量来读取, 这样不同的project还可以配置不同的环境变量但使用同一套code.
以下是一些例子:
1. 在启动启动运行的脚本中设置如下环境变量:
export WIFI_MODULES_PATH=$PWD/modules
export WPA_SUPPLICANT_PATH=$PWD
2. 在*.cmake中将 对应的文件copy到board下面的某路径
INSTALL( FILES ${INSTALL_PATH}/bin/aaaa DESTINATION ${VA_INSTALL_PATH_APPS} PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_WRITE GROUP_EXECUTE )
//注意权限的设置, 不然一些执行程序运行不了
3. 如果运行将一些配置文件在系统运行起来后copy到其他路径 可以使用如下脚本:
#copy XXXXX.conf
if [ -f $XXXXX_PATH/XXXXX.conf ]
then
if [ -f $XXXXX_CONF_DIR/XXXXX.conf ]
then
echo "XXXXX-exist"
else
echo "XXXXX-do-copy"
mkdir -p $XXXXX_CONF_DIR
cp $XXXXX_PATH/minidlna.conf $XXXXX_CONF_DIR/XXXXX.conf
fi
else
echo "XXXXX-no-exist"
fi
此脚本可以在系统启动的脚本中调用或者在main函数中透过system()调用
4. code中如何读取path:
char *path_value = NULL;
int const path_length = 60;
char str_conf_path[path_length];
if ((path_value = getenv("XXXXX_CONF_DIR")))
{
strncpy(str_conf_path, path_value, path_length);
str_conf_path[path_length -1] = '\0';
strncat(str_conf_path, "/XXXXX.conf", path_length-strlen(str_conf_path)-1);
DPRINTF(E_DEBUG, L_GENERAL, "XXXXX_CONF_DIR: %s.\n", str_conf_path);
}
else
{
DPRINTF(E_WARN, L_GENERAL, "XXXXX_CONF_DIR Not set.\n", path_value);
strncpy( str_conf_path, XXXXX_CONF_PATH, path_length);
}
str_conf_path[path_length -1] = '\0';