2015-09-25 143 views
0

我有一个非常简单的设置。两个独立目录中的两个文件。cmake似乎没有拿起我的-DCMAKE_CXX_FLAGS

mkdir a 
touch a/a.h 
mkdir b 
echo '#include <a/a.h>' > b/b.c 

编译的作品,当我指定一个头路

cd b 
gcc -c -I.. b.c 
cd .. 

OK,现在让我们cmake的添加到图片。为了我的目的,我需要通过命令行指定标题搜索路径。考虑CMakeLists.txt只读。

cat<<EOF > b/CMakeLists.txt 
cmake_minimum_required (VERSION 3.0) 

project (b) 

add_library(b 
b.c 
) 
EOF 


mkdir b/build 
cd b/build 
cmake -DCMAKE_CXX_FLAGS=-I.. .. 
make VERBOSE=1 

但要失败,我没有看到在cc命令行-I ..规范。

[ 50%] Building C object CMakeFiles/b.dir/b.c.o 
/Applications/Xcode.app/Contents/Developer/Toolchains /XcodeDefault.xctoolchain/usr/bin/cc -o CMakeFiles/b.dir/b.c.o -c /tmp/b/b.c 
/tmp/b/b.c:1:10: fatal error: 'a/a.h' file not found 

我试过给绝对路径,但它只是不适合我。

回答

1

你的文件有.c扩展名,你应该使用CMAKE_C_FLAGS它。

而且你应该指定最需要的情况下,包括在CMakeLists.txt本身的搜索路径:

include_directories(..) 
+0

权。我很困惑,因为我认为CMAKE_CXX_FLAGS也一直用于.m文件(然后我认为CXX意味着任何C,而不是它)。 视情况而定,至少在OS X上,有时cmake使用C++ for .m文件,有时使用cc。然后在一种情况下使用CMAKE_CXX_FLAGS并在另一种情况下使用CMAKE_C_FLAGS。 – user3093235