2016-07-01 2 views
0

最近私はCMakeの実験を始め、C言語で簡単なHello, Worldプログラムを書いています。ここでCMakeがバイナリをどのように置くかについての混乱

は私のディレクトリ構造です:次のように

CMakeLists.txt 
src/ 
    CMakeLists.txt 
    main.cpp 
build/ 

トップレベルCMakeLists.txt読み取り:/ srcの中

#Require at least CMake version 2.8 
cmake_minimum_required(VERSION 2.8 FATAL_ERROR) 

#set up the project name, version and language to compile in 
project(HelloWorld) 

#tell CMake that we have some source files located in the src directory 
add_subdirectory(src) 

そしてCMakeLists.txtは読む:

add_executable(helloworld 
       main.cpp) 

install(TARGETS helloworld 
      RUNTIME DESTINATION ../build) 

ここで、これらの2つのスクリプトがmakefileに/ buildディレクトリにhelloworldバイナリを作成させ、 makeを実行した後、/ build/srcにhelloworldバイナリを作成します。

add_executableとinstall関数呼び出しをトップレベルCMakeLists.txtに移動すると、helloworldバイナリは/ buildではなく/ build/srcに配置されます。

私が理解するように、CMakeが呼び出された場所の相対的なフォルダにビルドを置きます。なぜインストールは何もしていないように見えるのですか? さらに、複数の複雑なサブディレクトリがあるとどうなりますか? ファイル(GLOB ...)を避けながらCMakeLists.txtを書き出す方法は?

たとえば、

CMakeLists.txt 
/build 
/src 
    /class_A 
     a.hpp 
     a.cpp 
    /class_B 
     b.hpp 
     b.cpp 
     /class_CB 
     cb.hpp 
     cb.cpp 
    /class_D 
     d.hpp 
     d.cpp 

は、私はちょうど、する.cppファイルの巨大なリストを持っているそれぞれのcppファイルへの相対パスを持つすべて、およびadd_executable(実行ファイル$ {} SOURCE_FILES)にそのリストを渡しますか?または複数のCMakeLists.txtを使用すると簡単な方法がありますか?

答えて

1

installコマンドを誤って解釈しました。これは、ファイルをインストールするために使用されます(例:make install)。

プロジェクトを構成すると、CMakeはプロジェクトの構造を模倣します。つまり、すべてのフォルダが同じ構造で作成され、バイナリがビルドディレクトリに表示されます。

メインディレクトリにターゲットを配置してください。これは悪いと思われます。 build/srcでライブをするか、もっと意味のある名前を付けてください。

関連する問題