【问题标题】:.clang_complete and CMake?.clang_complete 和 CMake?
【发布时间】:2013-01-12 10:41:45
【问题描述】:

我正在使用 CMake 生成我的 Makefile,但是我无法使用标准生成 .clang_complete

make CC='~/.vim/bin/cc_args.py gcc' CXX='~/.vim/bin/cc_args.py g++' -B

什么都没有生成...

树形结构是这样的

Root
 |
 |_core
 |  |_src
 |  |  |_main.cpp
 |  |  |_CMakeLists.txt (1)
 |  |_inc
 |  |_CMakeLists.txt (2)
 |
 |_lib
 |  |_rtaudio
 |
 |_CMakeLists.txt (3)

CMakeLists.txt (1) 文件:

 include_directories("${Dunkel_SOURCE_DIR}/core/inc")

include_directories("${Dunkel_SOURCE_DIR}/lib/")
link_directories("${Dunkel_SOURCE_DIR}/lib/rtaudio")

add_executable(Dunkel main.cpp)

target_link_libraries(Dunkel rtaudio)

CMakeLists.txt (2) 文件:

subdirs(src)

CMakeLists.txt (3) 文件:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

PROJECT(Dunkel)
SUBDIRS(core)

set(CMAKE_CXX_FLAGS "-g")

我在这里做错了什么?

【问题讨论】:

  • make ... 是错字吗?你需要运行CC=gcc CXX=g++ cmake /path/to/src。这些python脚本~/.vim/bin/cc_args.py是什么?
  • cc_args 包装对 CC CXX 变量指向的编译器的调用。它处理每个调用并将任何外部依赖项输出到名为 .clang_complete 的配置文件中,因此当 clang_complete 正在查找某些外部库的源文件等时,它知道在哪里查找。

标签: cmake clang-complete


【解决方案1】:

看起来与make 相反,cmake 不会扩展波浪号,因此它将 is 视为路径的一部分。要使其按预期工作,请使用 cc_args.py 脚本的绝对路径或在命令中进行两个简单的更改:

  1. 将波浪号替换为$HOME
  2. 用双引号替换单引号。

更改后,您的命令应如下所示:

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

它应该可以工作。

【讨论】:

  • 我刚刚在 OS X 10.9.5 和 cmake 3.0.2 上尝试过这个,并且必须提供完整的用户路径。 $HOME 设置正确,但它似乎没有得到扩展
  • @thisisdog,这取决于您使用的外壳。 CXX=~/... 可能会工作,CXX="$HOME/..." 在 bash 中工作正常。
  • 请看我的回答,我试着听从你的建议,但也许CXX 不是正确使用的变量(至少对我来说),因为没有与“cc_args”相关的东西出来cmake...
【解决方案2】:

你应该运行(在你的构建目录中)

CXX='~/.vim/bin/cc_args.py g++' cmake ..

然后像往常一样运行make。请注意,这将在您每次使用make 构建项目时运行 cc_args.py 脚本,如果您想禁用此功能,请再次重新运行 cmake

.clang_complete 文件将在构建目录中创建,如果需要,请移动它。

另见Vim: Creating .clang_complete using CMake

【讨论】:

  • 问题在于这种方法我得到“在环境变量 CXX 中找不到编译器集:~/.vim/bin/cc_args.py clang++。
  • 听起来你的 cc_args.py 不在~/.vim/bin/cc_args.py
  • 确实... pepe@ppp:~/.vim/bin$ ls -l total 12 -rwxrwxrw- 1 pepe pepe 1816 Jan 26 01:15 cc_args.py
【解决方案3】:

使用$HOME/.vim/bin/cc_args.py 而不是~/.vim/bin/cc_args.py 很重要,因为~ 在引用时可能不会扩展。

另外,验证 python 脚本是否存在:

$ ls -l $HOME/.vim/bin/cc_args.py
-rwxr-xr-x  1 myself  staff  2270 Sep 19 16:11 /home/myself/.vim/bin/cc_args.py

如果没有找到,根据需要调整 python 脚本路径。

在构建目录中运行make clean

正如@xaizek 所建议的,从一个空的构建目录开始(假设构建目录是源目录的子目录):

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

接着是:

make

此时,make 将构建项目,但调用cc_args.py(将调用g++),而不是直接调用g++

但是这部分对我来说无法正常工作,并且在构建目录或其他任何地方都没有创建 .clang_complete 文件。

事实上,生成的CMakeCache.txt/Makefile中并没有出现“cc_args”,所以我怀疑CXX不是传递给cmake的正确变量名。

完成后,将.clang_complete 复制到父目录。

【讨论】:

  • cmake 不足的怪癖无处不在……见他们的docs。如果 CMakeCache.txt 是从以前的版本中遗留下来的,您需要自己删除它,否则 $CXX 将不被尊重。我没有看到通过-D 参数指定带有参数的编译器命令的记录方法....(尽管-DCMAKE_CXX_COMPILER=".../cc_args.py" -DCMAKE_CXX_COMPILER_ARG1=g++ 似乎有效)。
【解决方案4】:

这对我有用

sudo chmod a+x $HOME/.vim/bin/cc_args.py
CXX="$HOME/.vim/bin/cc_args.py  g++"  sudo cmake ..
sudo make

然后 ls -a 显示我的 .clang_complete 文件,但仍然是 emtyp。

【讨论】:

    猜你喜欢
    • 2013-02-06
    • 2012-10-10
    • 2012-11-09
    • 1970-01-01
    • 2012-05-02
    • 2014-10-02
    • 2013-05-26
    • 1970-01-01
    • 2012-07-27
    相关资源
    最近更新 更多