- Wikipedia / CMake
- プログラミングTipsWiki / cmake1
- torutkの日記 / 2008-10-05: cmake最初の一歩
- よくわからない現代魔法 / 2010-01-02: cmakeの使い方メモ
- bambooflow Note / ODE / cmake
- PC Memo / build / Cmake
- へぼいいいわけ / 2011-03-24: CMakeを使って自作ライブラリをビルド&インストールしてみたまとめ
- s21g :: Hello, world! / 2009-11-12: CMakeでサブディレクトリの変数を取得する方法
- opamp_sando's blog / 2011-05-28: CMakeの基本
- tuedaの日記 / 2010-09-02: CMakeの調査
- wagavulin's blog / search: CMake
- Qiita / mrk_21 / 2014-12-23: CMake: プリコンパイル済みヘッダーの作成と利用
少なくとも cygwin で確認する限り、ワークディレクトリのフルパスにスペースやマルチバイト文字が含まれていると上手く動作しない模様。
適当な場所にシンボリックリンクを作ってもなぜかうまく行かない。
SUBST なら問題なさそう。
適当な場所にシンボリックリンクを作ってもなぜかうまく行かない。
SUBST なら問題なさそう。
正式なやり方がよく分からないので、とりあえず以下のような内容で Makefile.cmake を作っておくと良いかも?
help: @echo "The following are some of the valid targets for this Makefile:" @echo "... clean" @echo "... subst" .PHONY : help clean: -rm -r CMakeFiles cmake_install.cmake CMakeCache.txt subst: subst w: .
CMakeLists.txt に以下のような記述を追加しておけば良いようだ。
コメントアウト部分については適宜。
上記は、ちょっと古い gcc3 系統の場合。
現行の gcc4 系統では、cygwin native の gcc と MinGW on cygwin の gcc が別パッケージになっている。
2013-08-23 現在、gcc4 系統では以下の名前のバイナリに分かれている。
どうも cross-compile と同じ要領で -DCMAKE_TOOLCHAIN_FILE=... でツールチェインを与えてやる方を推奨されているような雰囲気。
やり方は以下が参考になる。
うちは、以下のようなファイルを用意しておいて
以下のようにしてみた。
コメントアウト部分については適宜。
if (CYGWIN) set(CMAKE_C_FLAGS "${CMAKE_C_LINK_FLAGS} -mno-cygwin") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_LINK_FLAGS} -mno-cygwin") # set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -mno-cygwin") # set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -mno-cygwin") # set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -mno-cygwin") set(LINK_FLAGS "${LINK_FLAGS} -mno-cygwin") endif(CYGWIN)2013-08-23:
上記は、ちょっと古い gcc3 系統の場合。
現行の gcc4 系統では、cygwin native の gcc と MinGW on cygwin の gcc が別パッケージになっている。
2013-08-23 現在、gcc4 系統では以下の名前のバイナリに分かれている。
- cygwin 用 (gcc4* パッケージ): /usr/bin/i686-pc-cygwin-*.exe
- MinGW 用 (mingw-gcc* パッケージ): /usr/bin/i686-pc-mingw32-*.exe
どうも cross-compile と同じ要領で -DCMAKE_TOOLCHAIN_FILE=... でツールチェインを与えてやる方を推奨されているような雰囲気。
やり方は以下が参考になる。
- CMake wiki
- bitWalk's / 2010-05-04: CMake と クロスコンパイル
うちは、以下のようなファイルを用意しておいて
# CMake Toolchain for mingw-gcc* packages on cygwin. # Usage: cmake -DCMAKE_TOOLCHAIN_FILE=Toolchain-i686-pc-mingw32.cmake . set(COMPILER_PREFIX "i686-pc-mingw32") SET(MINGW32 ON) LINK_LIBRARIES(mingw32) # which compilers to use for C and C++ find_program(CMAKE_RC_COMPILER NAMES ${COMPILER_PREFIX}-windres) find_program(CMAKE_C_COMPILER NAMES ${COMPILER_PREFIX}-gcc) find_program(CMAKE_CXX_COMPILER NAMES ${COMPILER_PREFIX}-g++) find_program(CMAKE_LINKER NAMES ${COMPILER_PREFIX}-ld) find_program(CMAKE_RANLIB NAMES ${COMPILER_PREFIX}-ranlib) find_program(CMAKE_AR NAMES ${COMPILER_PREFIX}-ar)
cmake -DCMAKE_TOOLCHAIN_FILE=Toolchain-i686-pc-mingw32.cmake .cross-compile じゃないので HOST とか SYSTEM はあえて変更していない。
調査中
参考になりそうなページ等:
参考になりそうなページ等:
- stackoverflow / 2011-08-01: How to detect sse availability in CMake
- GitLab / Matthias / VC / cmake
- GitHub / tarantool / cmake / simd.cmake
以下のようにすれば良いらしい。
find_package(CUDA REQUIRED) cuda_add_executable(hoge hoge.cu)参考:
2016-09-26: 更新
--build オプションを用いると、見かけ上 make や nmake や IDE を使わず cmake だけでビルド作業を完結出来る。
実際には裏で、生成したビルドファイル用のビルドツールを CUI で呼び出しているので、例えば、Visual Studio だと MSBuild を用いてコンソールからビルドされる。
ヘルプは以下のの何れかの方法で参照出来る。
build, rebuild, install, clean 相当の動作は用いるバックエンドにより少しずつやり方を変える必要がある。
バックエンドが Visual Studio の場合、若干トリッキーだが以下のようにすれば良い。
build
なお config について Visual Studio の場合、標準で Debug, Release のフォルダを分けるため、あまり気にする必要はないが、make, nmake は標準ではフォルダを分けないので、ビルドパスを工夫するか、rebuild または一旦 clean した後に build する必要がある。
--build オプションを用いると、見かけ上 make や nmake や IDE を使わず cmake だけでビルド作業を完結出来る。
実際には裏で、生成したビルドファイル用のビルドツールを CUI で呼び出しているので、例えば、Visual Studio だと MSBuild を用いてコンソールからビルドされる。
ヘルプは以下のの何れかの方法で参照出来る。
- CMake / Documentation # Command-Line Tools / cmake(1) # Build Tool Mode
cmake --build cmake --build . --help
build, rebuild, install, clean 相当の動作は用いるバックエンドにより少しずつやり方を変える必要がある。
バックエンドが Visual Studio の場合、若干トリッキーだが以下のようにすれば良い。
build
cmake --build . [--config Debug|Release] [--target ALL_BUILD|any_target]rebuild
cmake --build . --clean-first [--config Debug|Release] [--target ALL_BUILD|any_target]install
cmake --build . [--config Debug|Release] --target INSTALLclean
cmake --build . --clean-first [--config Debug|Release] --target ZERO_CHECK
なお config について Visual Studio の場合、標準で Debug, Release のフォルダを分けるため、あまり気にする必要はないが、make, nmake は標準ではフォルダを分けないので、ビルドパスを工夫するか、rebuild または一旦 clean した後に build する必要がある。
エントリーポイントが WinMain() のプログラムをコンパイルすると _main() がないと言って怒られた。
コンパイル過程を見ていると /SUBSYSTEM:CONSOLE って明示されてて、これを /SUBSYSTEM:WINDOWS にするには、以下のようにせよとの事。
コンパイル過程を見ていると /SUBSYSTEM:CONSOLE って明示されてて、これを /SUBSYSTEM:WINDOWS にするには、以下のようにせよとの事。
add_executable(exename WIN32 source1 source2 ... sourceN)参考:
option コマンドを用いると、Cached variable を作成出来、これは、条件付きビルド、条件付きコンパイル用のスイッチとして利用出来る。
Cached variables の一覧は cmake にオプション -L[A][H] を与えた際、「-- Cache values」以降の行から得られる。
A, H は追加オプションとなっており、標準では non-advanced cached variables の一覧だけが表示されるところ、A を追加すると Advanced variables も表示され、H を追加すると option コマンドに与えた説明文も表示される。
Advanced, non-advanced の切り替えは mark_as_advanced コマンドで指定する。
ビルド時、cached variables にデフォルト値以外の値を与えるには、
参考:
Cached variables の一覧は cmake にオプション -L[A][H] を与えた際、「-- Cache values」以降の行から得られる。
A, H は追加オプションとなっており、標準では non-advanced cached variables の一覧だけが表示されるところ、A を追加すると Advanced variables も表示され、H を追加すると option コマンドに与えた説明文も表示される。
Advanced, non-advanced の切り替えは mark_as_advanced コマンドで指定する。
ビルド時、cached variables にデフォルト値以外の値を与えるには、
- -D <var>:<type>=<value>, -D <var>=<value> オプションを用いる
- ccmake (curses based user interface for CMake) を用いる
- cmake-gui を用いる
- Makefile を生成している場合は make config する
参考:
- stackoverflow
-G "Visual Studio 14 2015 [arch]" で arch に Win64 とか与えるのがかったるかったんだけど、vcvars64.bat 済ませてる前提だと、
-G オプションは与えず、-A <platform-name> オプションに x64 のみ与えれば問題ないようだ。
-G オプションは与えず、-A <platform-name> オプションに x64 のみ与えれば問題ないようだ。
cd build cmake -A x64 ..参考:
タグ
コメントをかく