きっかけ
アークナイツ自動周回の記事でc++を使ったが、 コンパイル時にフレームワークやらpkg-configやらを入力していたので、大変。
g++ -std=c++11 -framework CoreGraphics -framework CoreFoundation main.cpp `pkg-config --cflags opencv4` `pkg-config --libs opencv4`コンパイルしたい時にいちいちメモを開かないといけない。
cmakeを使えばそんなことをしなくていい気がするので使ってみる。
まずは基本をやってみる
- main.cppとCMakeLists.txtを書く
#include <iostream>
int main() {
std::cout << "Hello, world!" << std::endl;
return 0;
}cmake_minimum_required(VERSION 3.1)
project(hello_world CXX)
add_executable(main_app main.cpp)- buildフォルダを作る(ごちゃごちゃするから)
<プロジェクトディレクトリ>
|-main.cpp
|-CMakeLists.txt
|-build/- buildフォルダ内でConfigureとGenerateを実行する
cmake ..- ビルドする
cmake --build . .はbuildフォルダを示す
- 結果
実際にcmakeを適用してみる
外部ライブラリの導入
とりあえず上記のCMakeLists.txtのままやってみたら外部ライブラリのincludeでエラーを出したのでやってみる。
find_package()で外部ライブラリを探せる。
CMakeLists.txtにfind_package(OpenCV 4.5.1)という一文を追加したらちゃんと探せた。
-- Found OpenCV: /usr/local/Cellar/opencv/4.5.1_2 (found suitable version "4.5.1", minimum required is "4.5.1") 最終的に【C++】OpenCV3をOSXにインストールしてcmakeで優勝💪💪【完全に理解した】 をコピペした
cmake_minimum_required(VERSION 3.1)
project(arknights_auto CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
find_package(OpenCV 4.5.1 REQUIRED)
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable(main_app main.cpp)
target_link_libraries(main_app ${OpenCV_LIBS})CMAKE_CXX_STANDARDにはバージョン、
CMAKE_CXX_FLAGSにoptionをセットできる。
ここでは直接入力値を代入できるが、add_definitionsでも設定できる。
include_directoriesでincludeして、
target_link_librariesでopencvのライブラリとリンクしている。
フレームワークもこれで指定できる。
でもtarget_link_librariesは使わないライブラリもリンクするからよくないらしい。
CoreGraphicsのフレームワークもこれで入れる。
最終的には次のようにしてコンパイルできるようになった。
cmake_minimum_required(VERSION 3.1)
project(arknights_auto CXX)
set(CMAKE_CXX_STANDARD 11)
add_definitions(-std=c++11 -Wall)
find_package(OpenCV 4.5.1 REQUIRED)
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable(main_app main.cpp)
target_link_libraries(main_app ${OpenCV_LIBS})
target_link_libraries(main_app "-framework CoreGraphics")
target_link_libraries(main_app "-framework CoreFoundation")参考
OpenCV4.1.0をCMakeを使って導入する方法(Visual Studio 2019)
【C++】OpenCV3をOSXにインストールしてcmakeで優勝💪💪【完全に理解した】
最後のリンクは項目化してあってわかりやすい