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
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})