CmakeでMakefileを書く
1775 ワード
Linuxを習い始めて、正直に言うと本当につらいです.
Linuxでc++プログラムを書くには、実行可能なファイルを形成するには2つのプロセスが必要です:compileとlink
Compileはコンパイルプロセス、すなわちソースファイルをいくつかの中間ターゲットファイルに生成する.obj
リンクはこれらをobjファイルとlibrary fileの.libファイルをリンクする実行可能ファイルを生成する.a
一般的にmakefileファイルを自分で書いて、上記のプロセスに必要な前提をプリセットすることができます.一般的なモードは
target: dependencies
[tab] system command
複雑でエラーが発生しやすい
CmakeでMakefileファイルを自動的に生成する一般的な手順は
-CMakeListsを書くtxtファイル
-terminalでソースプログラムの場所directoryに切り替える
- mkdir build
- cd build
- cmake ..
- make
-binまたは現在のdirectoryで実行します./out.a
-再実行すると、保険方法rm-mf buildが再実行されます.
ポイントはCMakeListsを書く方法です.txtファイル、以下はOpenCVを含むImreadの例であり、ソースプログラムはimreadである.cpp
例えばOpenCVとCurlの2つのlibraryを含む
Linuxでc++プログラムを書くには、実行可能なファイルを形成するには2つのプロセスが必要です:compileとlink
Compileはコンパイルプロセス、すなわちソースファイルをいくつかの中間ターゲットファイルに生成する.obj
リンクはこれらをobjファイルとlibrary fileの.libファイルをリンクする実行可能ファイルを生成する.a
一般的にmakefileファイルを自分で書いて、上記のプロセスに必要な前提をプリセットすることができます.一般的なモードは
target: dependencies
[tab] system command
複雑でエラーが発生しやすい
CmakeでMakefileファイルを自動的に生成する一般的な手順は
-CMakeListsを書くtxtファイル
-terminalでソースプログラムの場所directoryに切り替える
- mkdir build
- cd build
- cmake ..
- make
-binまたは現在のdirectoryで実行します./out.a
-再実行すると、保険方法rm-mf buildが再実行されます.
ポイントはCMakeListsを書く方法です.txtファイル、以下はOpenCVを含むImreadの例であり、ソースプログラムはimreadである.cpp
cmake_minimum_required (VERSION 2.8)
project(Imread)
find_package(OpenCV REQUIRED)
add_executable(Imread imread.cpp)
target_link_libraries(Imread ${OpenCV_LIBS})
例えばOpenCVとCurlの2つのlibraryを含む
#version requirement
cmake_minimum_required (VERSION 2.8)
#project name
project(Demo)
#find linking libraries
find_package(OpenCV REQUIRED)
find_package(CURL)
IF (CURL_FOUND)
MESSAGE(STATUS "Curl libraries found at: ${CURL_LIBRARIES}")
MESSAGE(STATUS "curl includes found at ${CURL_INCLUDE_DIRS}")
else()
MESSAGE(SEND_ERROR "Could not find cURL on your system")
ENDIF(CURL_FOUND)
#find all source files in recent directory, ex main.cpp xx.hpp, x.cpp etc
aux_source_directory(. DIR_SRCS)
INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR}/include )
link_directories( ${CMAKE_BINARY_DIR}/bin )
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
#generate executeable file
add_executable (Demo ${DIR_SRCS})
#add link lib
target_link_libraries(Demo ${OpenCV_LIBS} ${CURL_LIBRARIES})