2017-03-01 23 views
2
次のように

私のプロジェクトは構造である:CMakeでヘッダファイルとソースファイルを分離する方法は?

--root: main.cpp CMakeLists.txt 

    --src: function.cpp CMakeLists.txt 

    --include: function.h 

main.cppに:ルートディレクトリ内

#include <iostream> 
#include "function.h" 
using namespace std; 

int main(int argc, char *argv[]) 
{ 
    //call module in function.hpp 
    return 0; 
} 

CMakeLists.txt:

project(t1) 
cmake_minimum_required(VERSION 2.8) 
add_subdirectory(src)    
file(GLOB_RECURSE SOURCES 
    include/function.h 
    src/function.cpp)    
add_executable(${PROJECT_NAME} ${SOURCES}) 

CmakeLists.txtでsrcディレクトリ:

include_directories(${PROJECT_SOURCE_DIR}/include) 

機能の別の実装を実現するためにルートとsrcディレクトリにCMakelistsを書くには?さらに、メインでどのように呼び出すか。可能な解答はCMake not finding proper header/include files in include_directoriesです。しかし、それはまだ私の状況に一致しません。ルートに

+1

'$ {SOURCES}'ヘッダーファイルを含むべきではありません。 'include_directories'を使って' include'パスを指定してください。 –

+1

@πάνταῥεῖあなたはターゲットのソースの間にヘッダファイルを置くことができます。 CMakeはそれらをコンパイルしようとはしませんが、他のツール、例えばIDEsは、リスト/ツリーにヘッダーを表示することができます。 – Biffen

+0

Qtツリーにインクルード/ヘッダーを表示する方法は、まさに私が望んでいたものです。しかし、私はあなたが上記の特定の操作を理解できません。おそらく、以下の受け入れられた回答に操作を追加する方法を私に示すことができます。 – Qinchen

答えて

3

:SRCで

project(t1) 
cmake_minimum_required(VERSION 2.8) 
include_directories(include) 
add_subdirectory(src)    

set(TARGET target_name) 
add_executable(${TARGET} main.cpp function.cpp) 
+0

main.cppがsrcにある場合、あなたのソリューションは私の問題を完全に解決しました。しかし、main.cppがルートにある場合はどうなりますか? – Qinchen

+2

@ Qinchen 'add_executable($ {TARGET} ../main.cpp function.cpp)'または '$ {CMAKE_SOURCE_DIR}/main.cpp' – fandyushin

+0

ありがとうございます。答えは完璧です。 – Qinchen

関連する問題