2015-09-25 132 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