きっかけ
アークナイツ自動周回の記事で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で優勝💪💪【完全に理解した】
最後のリンクは項目化してあってわかりやすい