【问题标题】:cmake and default compilerscmake 和默认编译器
【发布时间】:2013-03-08 10:35:19
【问题描述】:

我最近将我的 OS X 更新为 Mountain Lion。不幸的是,FreeBSD 切换到了我需要的不支持 OpenMP 的编译器套件 (llvm/clang),而 Apple 将该套件设置为默认编译工具。

幸运的是,OS X 10.8 包含一个旧的 gcc 4.2 编译器,它仍然可以用于一些遗留代码。

我使用 cmake (v2.8) 构建程序。为了使用 gcc 编译器,我首先尝试在 CMakeLists.txt 脚本中设置两个变量。更具体地说,我设置了CMAKE_C_COMPILERCMAKE_CXX_COMPILER。但是,设置这两个变量没有效果:cmake 一直使用不支持 OpenMP 的 llvm 编译器。

然后我尝试设置两个环境变量,CCCXX(在 .profile/.bashrc 脚本中),指向用于 CMake 变量的相同编译器。通过使用这两个变量,我可以编译我的源代码。

我的问题是:这两个 CMake 变量 (CMAKE_..._COMPILER) 有什么意义?我应该如何使用它们?

谢谢。

【问题讨论】:

    标签: c++ gcc g++ cmake


    【解决方案1】:

    这些变量确实可以使用,但必须在自动检测编译器之前设置它们。您通常使用命令行或缓存初始化脚本来执行此操作:

    # by setting CC anc CXX
    CC=gcc-4.2 CXX=g++-4.2 cmake ...
    
    # by passing the definitions of CMAKE_{C,CXX}_COMPILER to cmake directly
    cmake -DCMAKE_C_COMPILER:FILEPATH=`which gcc-4.2` -DCMAKE_CXX_COMPILER:FILEPATH=`which g++-4.2` ...
    
    # by passing a cache-initialization script
    cmake -C init_cache.cmake
    

    文件init_cache.cmake 包含类似的内容

    set(CMAKE_C_COMPILER CACHE FILEPATH /usr/bin/gcc-4.2)
    set(CMAKE_CXX_COMPILER CACHE FILEPATH /usr/bin/g++-4.2)
    

    【讨论】:

    • 我想补充一点,第一个选项(env. vars CCCXX)通常被视为为 CMake 选择编译器的首选方式。 并且它必须在一个新的二叉树中完成。一旦 CMake 检测到编译器,它们就会被烘焙到其缓存中(很可能也是 CMakeTemp)。
    • 不客气。请注意,第一种方法(即设置 CCCXX)被 CMake 开发人员认为是首选方法。我发现最后一种方法在使用自动构建时非常有用。
    • @Angew 真实。如果您在创建构建树之后更改缓存中的这些变量,CMake 会注意到并从头开始重新配置。
    猜你喜欢
    • 2011-10-28
    • 2010-12-13
    • 2016-01-17
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    相关资源
    最近更新 更多