2016-04-13 5 views
0

をコンパイルするためにこれは私の作業ディレクトリで設定しはcmakelistが正しくプロジェクト

cmake_minimum_required(VERSION 3.5.1) 
project(app) 
include_directories(include) 
file(GLOB SOURCES src/*.c) 
add_executable(file3 src/file3.c) 
target_link_libraries(file3 m ${SOURCES}) 

その後、私は次のようにします。

$cmake . 
$make 

しかし、エラーが発生する:

[ 50%] Building C object CMakeFiles/file3.dir/src/file3.c.o 
[100%] Linking C executable file3 
src/file3.c:1:19: fatal error: file1.h: File does not exist 

file3.cだけである:

#include "file1.h" 
#include "file2.h" 

int foo3(int a, int b){ 
    return foo1(a,b) + foo2(a,b); 
} 

私が正しくCMakeListsを設定するにはどうすればよいですか?カレントディレクトリにしていない他の含まれたディレクトリにファイル.hため

#include "file1.h" 

検索を使用して

答えて

1

に役立ちます。

target_link_libraries(file3 m ${SOURCES}) 

は、通常は、Mのようなコンパイルとリンクのみライブラリのadd_executable(数学関数用のlibm)にすべてのソースファイルを置きます。

add_executable(file3 ${SOURCES}) 
target_link_libraries(file3 m) 

これはもちろん、他のファイルにmain関数が含まれていない場合にのみ有効です。

include_directories(インクルード)は、コンパイル時に使用される-Iincludeとしてgcc呼び出しに追加されます。 https://gcc.gnu.org/onlinedocs/cpp/Include-Syntax.html。 make VERBOSE = 1であなたのgcc呼び出しを見ることができます。

gccはもうそこに見えないリンク時に、それがその機能を見つけることができませんがわかります理由(それはおそらく他の場所で失敗することにした後)、それはだ

また、あなたのソースとリンクしてライブラリを構築することができそれに対してあなたの実行ファイル。ただし、ライブラリのソースにfile3を含めないでください。

0

使用

#include <file.h> 

代わりに。

希望これは、あなたの実行ファイルにソースファイルをリンクされていますが、それらをコンパイルする必要があり

関連する問題