2016-04-13 67 views
0

這是我的工作目錄:設置cmakelist正確地編制項目

app 
|___include 
    |___file1.h 
    |___file2.h 
    |___file3.h 
    !___ ... 
|___src 
    |___file1.c 
    |___file2.c 
    |___file3.c 
    |___ ... 
|__CMakeLists.txt 
|__mainapp.c 

這是我CMakeLists.txt

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是否正確?

回答

1

您的源文件鏈接到你的可執行文件,但你應該編譯它們。

target_link_libraries(file3 m ${SOURCES}) 

通常情況下,你把你的所有源文件到add_executable像米編譯,只有鏈接庫(libm中的數學函數)。

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

這當然只適用於其他文件都不包含main函數的情況。

將include_directories(include)作爲-Iinclude附加到gcc調用中,這在編譯期間使用。 https://gcc.gnu.org/onlinedocs/cpp/Include-Syntax.html。你可以用make VERBOSE = 1看到你的gcc調用。

在鏈接的gcc看起來不存在了,這就是爲什麼它會告訴你它找不到函數(後它可能會失敗別處)

你也可以與你的源代碼,並建立鏈接庫你的可執行文件反對。但是,不要在庫的源代碼中包含file3。

0

在當前目錄中,而不是在其他包括目錄使用

#include "file1.h" 

搜索file.h。

使用

#include <file.h> 

代替。

希望這有助於

相關問題