web-dev-qa-db-ja.com

MakefileプロジェクトをCmakeに変換する

私はこのクラスでcmakeを使用する方法を学習していますが、ドキュメントは非常に冗長で高密度です。チュートリアルの多くは、あまりにも単純すぎて役に立たない(ファイルが1つしかないcmake)か、あまりに複雑です。

プロジェクトの元のMakefileは次のようになります。

# Some optimization settings
# see: http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

# Standard all target
all: hw1_p2

# Simple program to do brute-force k-nearest neighbor searches against a signature file
hw1_p2: prob2.o ParseRecord.o Sorter.o Timing.o
        g++ -o hw1_p2 prob2.o ParseRecord.o Sorter.o Timing.o

prob2.o: prob2.cpp utility_templates.hpp
        g++ -Wall -c prob2.cpp

ParseRecord.o: ParseRecord.cpp ParseRecord.hpp utility_templates.hpp
        g++ -Wall -c ParseRecord.cpp

Sorter.o: Sorter.cpp Sorter.hpp
        g++ -Wall -c Sorter.cpp

# Timing class
Timing.o: Timing.hpp Timing.cpp
        g++ -Wall -c Timing.cpp

# Clean code-derived files
clean:
        rm -f *.o hw1_p2 

プロジェクトはこのように構成されています

  • cmakelearn
    • CMakeLists.txt
    • 建てる
    • src
      • CMakeLists.txt
      • ParseRecord.hpp
      • Timing.cpp
      • small.dat
      • Makefile
      • Sorter.cpp
      • Timing.hpp
      • utility_templates.hpp
      • ParseRecord.cpp
      • Sorter.hpp
      • prob2.cpp

これまでのところ、私が読んだことから、すべてのディレクトリにCMakelists.txtファイルが必要であることを理解しています。そこに移動してcmakeを実行できるように、ビルドフォルダーがあります。

私が持っている最上位のCMakelists.txtファイル

cmake_minimum_required (VERSION 2.6)
project (CMAKETEST)
add_subdirectory(src)

そしてsrcディレクトリCMakelist.txtにここに私の試みがあります:

include_directories(${CMAKETEST_SOURCE_DIR}/src)
link_directories(${CMAKETEST_BINARY_DIR}/src)

add_executable(hw1_p2 prob2.cpp ParseRecord.cpp Sorter.cpp Timing.cpp)

それ以外はどこから始めればいいのかもよくわかりません。チュートリアルからのこのコメントは、cmakeとドキュメントに関する私の考えを今すぐ要約しています。

役に立つほど詳細ではありません。そうは言っても、CMakeはあまり好きではありません。あなたが知っておく必要のある個別の恣意的なものが多すぎます。少なくともそれが私の印象です。 「add_definitions(-std = c99)」のように。本当に?コンパイラーにフラグを追加する方法として、その名前はあなたに飛びついていますか?そして、「set(VAR a b c)」はVAR = a b cなどよりも直感的ですか?記事、およびCMakeに注意してください。それでも、CMakeがビルドワールドを席巻していることは知っています。

それでも、私は本当にこれを学び、理解したいので、あなたが提供できるどんな助けも大いに高く評価され、役立つでしょう。前もって感謝します。

17
Harrison

add_executable コマンドは実行可能ファイルをビルドするためのものですが、オブジェクト(.o)ファイルも同様です。ビルドする実行ファイルは1つだけなので、add_executableコマンド:

add_executable(hw1_p2 prob2.cpp ParseRecord.cpp Sorter.cpp Timing.cpp)
5
David Brown

すべてのサブディレクトリにcmakelists.txtファイルを作成する必要はありません。単純なプロジェクトの場合、すべてをトップレベルのcmakelists.txtに入れるだけで十分です。

cmake_minimum_required (VERSION 2.6)
project (CMAKETEST C CXX)

add_executable(hw1_p2 src/prob2.cpp src/ParseRecord.cpp src/Sorter.cpp src/Timing.cpp)

この単純なcmakelists.txtで仕事が完了するはずです。

6
user1283078