2013-02-21 48 views
2

我想设置我的CMakeLists.txt文件,以便它可以生成vim插件clang_complete所需的.clang_complete文件。CMake和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文件,因此必须为每个脚本编写脚本或手动放置一个通用脚本,这是步骤I我想避免。

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

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

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

因此,如果没有编写任何需要四处移动的外部脚本,是否有人可以想到一种可以做到这一点的方法?

回答

1

我知道你说“而无需编写任何其他外部脚本”,但它好像你只需要一行代码:

exec cc_args.py g++ 

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

+0

嗯...我会给它一个镜头,看看我能做些什么。我不知道file()函数是否存在,以便可以解决我的问题。 – AdmiralJonB 2013-02-21 13:40:06

+0

使用'file()'可以工作,但是你必须在调用'project()'之前完成它,并设置你的'CMAKE_CXX_COMPILER_INIT'变量指向它。在CMake中设置后,您无法更改编译器。 – Angew 2013-02-21 14:06:13

+0

啊,这可以解释我在编译器中遇到的另一个问题。我有一个选项来设置编译器,这实际上不会改变编译器。 – AdmiralJonB 2013-02-21 14:27:05