.clang_complete和CMake?

时间:2013-01-28 23:23:26

标签: cmake clang-complete

我正在使用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")

我在这里做错了什么?

4 个答案:

答案 0 :(得分:4)

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

  1. 将代字号替换为$HOME
  2. 用双引号替换单引号。
  3. 更改后,您的命令应如下所示:

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

    它应该有用。

答案 1 :(得分:2)

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

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

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

将在构建目录中创建文件.clang_complete,并在需要时移动它。

另见Vim: Creating .clang_complete using CMake

答案 2 :(得分:1)

使用$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文件。

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

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

答案 3 :(得分:0)

这对我有用

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。