【问题标题】:CMake and clang_completeCMake 和 clang_complete
【发布时间】:2013-02-06 17:27:35
【问题描述】:

我想设置我的 CMakeLists.txt 文件,以便它可以生成 vim 插件 clang_complete 所需的 .clang_complete 文件。

通常,您可以通过将参数传递给它与编译器一起提供的 python 脚本以及用于编译的所有参数来执行此操作。请注意,我省略了 cc_args.py 所在的实际目录以节省空间。

cc_args.py gcc test.c -o test -I~/IncludeDirs/

您也可以在制作阶段执行此操作...

make CC='cc_args.py gcc' CXX='cc_args.py g++'

但是,我不确定如何(如果可能的话)在 CMakeLists.txt 文件中进行设置。每次我想设置 clang_complete 时都必须输入这个真的很烦人。我想这样做的原因是因为我有多个项目,我使用自定义脚本来构建 CMakeLists.txt 文件,因此必须为每个项目编写一个脚本或手动放置一个通用脚本是我的一个步骤想避免。

我已经尝试了一些迄今为止出现错误的方法。

我尝试将 CMAKE_CC_COMPILER 和 CMAKE_CXX_COMPILER 设置为类似于第一行的行,即“cc_args.py g++”。这里出现的错误说它找不到编译器(这是可以理解的)。

接下来我尝试将编译器变量设置为 cc_args.py 并为实际编译器添加一个标志:可以说,这非常失败。 CMake 说它无法编译测试程序(考虑到脚本不是编译器,并且测试不使用我设置的标志,我对此并不感到惊讶)。

因此,无需编写任何其他需要移动的外部脚本,有没有人可以想到一种可以做到这一点的方法?

【问题讨论】:

    标签: cmake clang-complete


    【解决方案1】:

    我知道您说“无需编写任何其他外部脚本”,但您似乎只需要一个单行:

    exec cc_args.py g++
    

    然后将该文件设置为您的 CMAKE_CXX_COMPILER。如果您不想分发它,您甚至可以使用 CMake 的 file() 函数在构建时编写单行代码。

    【讨论】:

    • 嗯...我会试一试,看看我能做些什么。我不知道 file() 函数存在,所以这可能会解决我的问题。
    • 使用file() 会起作用,但你必须在调用project() 之前这样做,并设置你的CMAKE_CXX_COMPILER_INIT 变量指向它。一旦在 CMake 中设置了编译器,就无法更改它。
    • 啊,这可以解释我在使用编译器时遇到的另一个问题。我有一个设置编译器的选项,它实际上不会改变编译器。
    • 使用文件功能对我有用,但是我必须使用 cmake execute_process 和 chmod 更改权限以使其可执行......这不是最理想的方式,但它可以完成工作。我还必须添加 $@ 以将所有参数传递给编译器。
    【解决方案2】:

    解决方法是在执行cmake之前设置好CXX环境变​​量。类似的东西:

    CXX="$HOME/.vim/bin/cc_args.py clang++" cmake ..
    make
    

    更多详情请见http://www.guyrutenberg.com/2013/01/29/vim-creating-clang_complete-using-cmake/。

    【讨论】:

    • 我试过这种方法,但它不会生成任何.clang_complete文件
    猜你喜欢
    • 2013-01-12
    • 2012-10-10
    • 2012-11-09
    • 1970-01-01
    • 2012-05-02
    • 2014-10-02
    • 2013-05-26
    • 1970-01-01
    • 2012-07-27
    相关资源
    最近更新 更多