相关疑难解决方法(0)

使用SCons更改Linux中的默认C编译器

在我的Linux平台上,我有几个版本的gcc.

根据usr/bin我的要求:

  • gcc34
  • gcc44
  • gcc

以下是一些输出:

$ gcc --version
gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-48)

$ gcc44 --version
gcc44 (GCC) 4.4.0 20090514 (Red Hat 4.4.0-6)
Run Code Online (Sandbox Code Playgroud)

我需要使用4.4版本,gcc但默认似乎是4.1 版本.

我有什么办法可以代替/usr/bin/gcc,并gcc44默认的编译器不使用符号链接/usr/bin/gcc44

我不能使用符号链接的原因是因为我的代码必须使用RPM包mock.mock从头开始创建一个最小的linux安装,并在编译我的代码之前安装指定的依赖项.我无法自定义这个"最小安装".

理想的情况下,完美的解决办法是安装官方的RPM包替换gccgcc44作为默认的编译器.有这样的包裹吗?这甚至可能/好吗?

附加信息

我必须使用SCons(make替代),它不允许我指定用于的二进制文件gcc.

我也会接受任何答案,告诉我如何gcc在我的SConstruct文件中指定二进制文件.

c gcc scons

15
推荐指数
2
解决办法
2万
查看次数

如何确定请求的编译器

我的项目使用SCons来管理构建过程.我想支持多个编译器,所以我决定使用,AddOption这样用户就可以在命令行中指定使用哪个编译器(默认情况下是当前编译器所用的编译器).

AddOption('--compiler', dest = 'compiler', type = 'string', action = 'store', default = DefaultEnvironment()['CXX'], help = 'Name of the compiler to use.')
Run Code Online (Sandbox Code Playgroud)

我希望能够为各种编译器提供内置的编译器设置(包括特定编译器的最大警告级别等).这是我目前首次尝试解决方案的方式:

if is_compiler('g++'):
    from build_scripts.gcc.std import cxx_std
    from build_scripts.gcc.warnings import warnings, warnings_debug, warnings_optimized
    from build_scripts.gcc.optimizations import optimizations, preprocessor_optimizations, linker_optimizations
elif is_compiler('clang++'):
    from build_scripts.clang.std import cxx_std
    from build_scripts.clang.warnings import warnings, warnings_debug, warnings_optimized
    from build_scripts.clang.optimizations import optimizations, preprocessor_optimizations, linker_optimizations
Run Code Online (Sandbox Code Playgroud)

但是,我不确定该is_compiler()功能是什么样的.我的第一个想法是直接比较编译器名称(例如'clang ++')与用户传入的内容.但是,当我尝试使用时,这立即失败了scons --compiler=~/data/llvm-3.1-obj/Release+Asserts/bin/clang++.

所以我觉得我会变得更聪明并且使用这个功能

cxx = GetOption('compiler')
def is_compiler (compiler):
    return cxx[-len(compiler):] == compiler
Run Code Online (Sandbox Code Playgroud)

这只会查看编译器字符串的结尾,以便忽略目录.不幸的是,'clang …

c++ python scons

5
推荐指数
1
解决办法
1565
查看次数

标签 统计

scons ×2

c ×1

c++ ×1

gcc ×1

python ×1