我正在从源代码编译相当大的项目。编译总是以以下结果结束:错误:从“const char*”到“char*”的转换无效 [-fpermissive]
我一年前就编译过这个项目。所以我知道一个解决方案。实际上我找到了更多解决方案:
- 在 cpp 代码的适当行中添加类型转换(每个文件中都有无数次更改。所以我找到了下一个解决方案。)
- 修改 makefile 以使用 -fpermissive 选项编译该文件。(我不得不修改每个 makefile 中的很多行。因此,我找到了更好的解决方案。)
- “g++”或“gcc”存储在一个变量中,所以我向这些变量添加了-fpermissive。
这是我能想到的最好的解决方案。只需将此选项添加到每个 makefile 一次即可。不幸的是,该软件的子目录数量巨大。因此我需要修改 100 多个 makefile。一年前我花了一整天时间才完成。
有没有办法可以更快地完成此操作。
这个怎么样? alias gcc='gcc -fpermissive' 我不熟悉别名。但试试这个应该很容易。语法正确吗?这个正确吗? alias g++='g++ -fpermissive' ?我需要以某种方式导出别名吗? make 程序会尊重别名吗?
我是否应该更改 ./configure 脚本?或者 ./configure.in?或者其他文件?
答案1
通过在文件中放置相关行,可以最轻松地设置别名~/.bashrc
。发出命令时,BASH 将搜索$PATH
该名称的可执行文件的第一个实例。~/.bashrc
文件中的别名总是会被首先找到,因此如果您的别名与实际命令同名(例如gcc
),则将执行该别名。
因此,根据您的情况,将以下几行添加到您的~/.bashrc
(是的,语法是正确的):
alias gcc='gcc -fpermissive'
alias g++='g++ -fpermissive'
或者,您可以创建不同的别名,以便选择是否需要该-fpermissive
标志:
alias gcc_per='gcc -fpermissive'
alias g++_per='g++ -fpermissive'
这样,您就可以根据需要使用gcc
to run/usr/bin/gcc
或gcc_per
to run /usr/bin/gcc -fpermissive
。显然,您可以将别名设置为您想要的任何名称,名称由您决定。
将相关行添加到您的之后~/.bashrc
,要么获取它(source ~/.bashrc
)要么打开一个新终端,然后您的新别名就设置好了,可以使用了。
答案2
我知道这是个老问题,但是为了将来参考:
在 中的别名gcc
和g++
在.bashrc
内不起作用make
。但是,您可以在 内覆盖make
的变量CC
和:CXX
.bashrc
export CC="gcc -fpermissive"
export CXX="g++ -fpermissive"
当然,这要求您在 makefile 的显式规则中使用$(CC)
和$(CXX)
,但无论如何您都应该这样做。默认情况下,它们在隐式规则中使用。