hack のためのネタ帳, etc,,,

ライセンス

参考になるページ等

Tips

少なくとも cygwin で確認する限り、ワークディレクトリのフルパスにスペースやマルチバイト文字が含まれていると上手く動作しない模様。
適当な場所にシンボリックリンクを作ってもなぜかうまく行かない。
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 に以下のような記述を追加しておけば良いようだ。
コメントアウト部分については適宜。
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
上記と同様の方法で CMAKE_C_COMPILER 等のプロパティを変更しても良いのだが、
どうも cross-compile と同じ要領で -DCMAKE_TOOLCHAIN_FILE=... でツールチェインを与えてやる方を推奨されているような雰囲気。
やり方は以下が参考になる。
うちは、以下のようなファイルを用意しておいて

Toolchain-i686-pc-mingw32.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 はあえて変更していない。
調査中

参考になりそうなページ等:
以下のようにすれば良いらしい。
find_package(CUDA REQUIRED)
cuda_add_executable(hoge hoge.cu)
参考:
2016-09-26: 更新
--build オプションを用いると、見かけ上 make や nmake や IDE を使わず cmake だけでビルド作業を完結出来る。
実際には裏で、生成したビルドファイル用のビルドツールを CUI で呼び出しているので、例えば、Visual Studio だと MSBuild を用いてコンソールからビルドされる。

ヘルプは以下のの何れかの方法で参照出来る。
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 INSTALL
clean
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 にするには、以下のようにせよとの事。
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 にデフォルト値以外の値を与えるには、
  • -D <var>:<type>=<value>, -D <var>=<value> オプションを用いる
  • ccmake (curses based user interface for CMake) を用いる
  • cmake-gui を用いる
  • Makefile を生成している場合は make config する
等の方法がある。

参考:
-G "Visual Studio 14 2015 [arch]" で arch に Win64 とか与えるのがかったるかったんだけど、vcvars64.bat 済ませてる前提だと、
-G オプションは与えず、-A <platform-name> オプションに x64 のみ与えれば問題ないようだ。
cd build
cmake -A x64 ..
参考:
タグ

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます