c – 是否可以通过makefile设置环境变量?
我想利用可以改变内存分配参数的MALLOC_PERTURB_环境变量(man 3 mallopt).但是,我想在应用程序级别而不是整个系统级别上控制分配参数.理想情况下,如果我可以通过项目的makefile控制它们.我试图通过makefile更改提到的变量,但没有成功.
为了测试,我创建了这个test.c文件: #include<stdlib.h> #include<stdio.h> #define N 50 int main() { char *chars; int i; if (NULL == (chars = malloc(N * sizeof(*chars)))) return EXIT_FAILURE; free(chars); for (i = 0; i < N; ++i) printf("%c",chars[i]); printf("n"); return EXIT_SUCCESS; } 是的,我知道我正在阅读释放的内存,但这是使用MALLOC_PERTURB_的重点. 预期结果:值为MALLOC_PERTURB_的50个字符的ASCII字符. 足够近: $export MALLOC_PERTURB_=97 $gcc test.c -o test $./test aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa?? $export MALLOC_PERTURB_=105 $gcc test.c -o test $./test iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii?? 然后我试图将编译包含在makefile中,但没有成功. 导出变量(as proposed here) Makefile文件 all: export MALLOC_PERTURB_=110 gcc test.c -o test 结果(我期待110的’n’字母) $export MALLOC_PERTURB_=105 $make export MALLOC_PERTURB_=110 gcc test.c -o test $./test iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii?? 递归调用(as proposed here) Makefile文件 all: MALLOC_PERTURB_=110 $(MAKE) rec rec: gcc test.c -o test 结果(我期待110的’n’字母) $export MALLOC_PERTURB_=105 $make MALLOC_PERTURB_=110 make rec make[1]: Entering directory '~/test' gcc test.c -o test make[1]: Leaving directory '~/test' $./test iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii?? 我试图从包含MALLOC_PERTURB_的github的makefile中找到任何灵感,但它们太复杂了我无法理解. 一些技术信息: Linux 4.0.1-1-ARCH x86_64 gcc version 4.9.2 20150304 (prerelease) (GCC) GNU Make 4.1 解决方法
Browning,在makefile中设置环境变量很容易,而且你已经这样做了,但这不是你想要的.这使得它在编译期间获取该值.但是你希望它在你运行程序时改变malloc的行为.
阅读您引用的手册页确认您需要在运行程序的环境中设置环境变量.另外,已经提到过,设置环境变量的makefile只对测试程序这样做,它们实际上是作为构建的一部分运行的. 你不想在makefile中使用它.您希望在实际运行程序时设置它,这是其他注释和答案告诉您如何操作.很抱歉接受了答案,但我需要更多的空间来清除它,而且这是答案,对你而言.你已经知道怎么做了.你完全不知道它到底是什么. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |