最近ようやく、autotoolsもなじんできたのだが、
バージョン管理したい場所で、いろいろなファイルができてしまうのが、ちと嫌だなーと思っていたのと、
Mingw32を使っていると、autotoolsやlibtoolなどが逆に厄介な部分もある。

そして、Unix文化なので、Mac(Framework, Xcode )やらWindowsとあまりなじんでいないということもあり、
CMakeがこれらの欠点を克服するかもということで、CMake に挑戦してみることにした。

さて、ということで、まずはaprのstatic library for mingw32 をCMakeを使って作ってみることにしました。
今日初めて触って、ここまでできたのでまあまあ使いやすいのかなと思いました。
(しかし、実は今DLLの作成ができなくて、四苦八苦しているのですが・・・)

あまり、わかりやすくまとまった情報がなかったのですが、
http://www.lepp.cornell.edu/~jmh263/marlintpc/cmake.pdf

http://www-flc.desy.de/ldcoptimization/documents/talks/CMake_Tutorial.pdf
が決行分かりやすと思いました。
(残念ながら、両方とも英語です。)

以下の3つのファイルを作成します。
まず、aprですが、こちらより、apr-1.4.6-win32-src.zipというファイルをダウンロードして、
好きなところで解凍してください。

そして、次に以下の3つファイルを作成します。

  1. CMakeLists.txt: メインです
  2. src_list.txt : win32で使うソースの一覧です。
  3. Linux-mingw32.cmake

となっています。
これらの内容は・・・

準備ができたら、

$mkdir tmp
$cd tmp
$cmake ..
$make

という感じです。
まず、ソースの一覧をわざわざ、src_list.txtに分けたのはまず、メインのCMakeLists.txtを見やすくするためと、
ホストがかわったときにソースがかわるのでそれに対応しやすくしたためです。
こうすれば、tmp以下だけが汚れるだけなので、かなりいいです。

また、mingw32の設定も別にしたのは、LinuxとMac(Darwin)で別の設定を使うためです。

CMakeLists.txt

cmake_minimum_required(VERSION 2.6)

PROJECT(apr-1 C)

file(STRINGS ${CMAKE_SOURCE_DIR}/src_list.txt SRC_LIST)
foreach(SRC_FILE ${SRC_LIST})
        STRING(STRIP ${SRC_FILE} SRC2_FILE)
        MESSAGE("srouce:[${SRC2_FILE}]")
        SET(SOURCE_LIST "${SOURCE_LIST};${CMAKE_SOURCE_DIR}/${SRC2_FILE}")
endforeach(SCR_FILE)

ADD_LIBRARY(apr-1 STATIC
${SOURCE_LIST}
)

include(${CMAKE_SYSTEM_NAME}-mingw32.cmake)

set(CMAKE_C_FLAGS "-DAPR_DECLARE_STATIC -DWIN32 -D_WINDOWS")
include_directories(include include/arch include/arch/win32 include/arch/unix)
target_link_libraries(apr-1 wsock32 ws2_32 rpcrt4)
configure_file(${CMAKE_SOURCE_DIR}/include/apr.hw ${CMAKE_SOURCE_DIR}/include/apr.h)

${CMAKE_SYSTEM_NAME}は

$uname -s

の結果です。つまり、Linuxで実行したときは、Linux-mingw32.cmakeになり、
MacOSXで実行すれば、Darwin-mingw32.cmakeになる訳です。
ここらへんの内容は別にパッケージに関わらずかわらないと思うので、私は、
/opt/cmake/
というフォルダを作ってそこに入れています。
ちなみに、最後にDarwin-mingw32.cmakeの内容ものせておきましたが、
かわるのは、gcc等のパスの位置でしょう。

Linux-mingw32.txt

set(CMAKE_SYSTEM_NAME "Windows")
set(CMAKE_BUILD_TYPE "Release")
set(MINGW_PREFIX "/usr/bin/i686-pc-mingw32-")
SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "-Wl,--no-undefined -static-libgcc -Wl,-O1 -Wl,--as-needed -Wl,--sort-common -s")

set(CMAKE_C_COMPILER     ${MINGW_PREFIX}gcc)
set(CMAKE_CXX_COMPILER ${MINGW_PREFIX}g++)
set(CMAKE_AR           ${MINGW_PREFIX}ar)
set(CMAKE_RANLIB       ${MINGW_PREFIX}ranlib)
set(CMAKE_LINKER       ${MINGW_PREFIX}ld)
set(CMAKE_STRIP        ${MINGW_PREFIX}strip)

set(CMAKE_EXECUTABLE_SUFFIX ".exe")

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

src_list.txt

atomic/win32/apr_atomic.c 
dso/win32/dso.c 
file_io/win32/buffer.c 
file_io/unix/copy.c 
file_io/win32/dir.c 
file_io/unix/fileacc.c 
file_io/win32/filedup.c 
file_io/win32/filepath.c 
file_io/unix/filepath_util.c 
file_io/win32/filestat.c 
file_io/win32/filesys.c 
file_io/win32/flock.c 
file_io/unix/fullrw.c 
file_io/unix/mktemp.c 
file_io/win32/open.c 
file_io/win32/pipe.c 
file_io/win32/readwrite.c 
file_io/win32/seek.c 
file_io/unix/tempdir.c 
locks/win32/proc_mutex.c 
locks/win32/thread_cond.c 
locks/win32/thread_mutex.c 
locks/win32/thread_rwlock.c 
memory/unix/apr_pools.c 
misc/win32/charset.c 
misc/win32/env.c 
misc/unix/errorcodes.c 
misc/unix/getopt.c 
misc/win32/internal.c 
misc/win32/misc.c 
misc/unix/otherchild.c 
misc/win32/start.c 
misc/win32/utf8.c 
misc/unix/version.c 
mmap/unix/common.c 
mmap/win32/mmap.c 
network_io/unix/inet_ntop.c 
network_io/unix/inet_pton.c 
network_io/unix/multicast.c 
network_io/win32/sendrecv.c 
network_io/unix/sockaddr.c 
network_io/unix/socket_util.c 
network_io/win32/sockets.c 
network_io/win32/sockopt.c 
passwd/apr_getpass.c 
poll/unix/poll.c 
poll/unix/pollcb.c 
poll/unix/pollset.c 
poll/unix/select.c 
random/unix/apr_random.c 
random/unix/sha2.c 
random/unix/sha2_glue.c 
shmem/win32/shm.c 
strings/apr_cpystrn.c 
strings/apr_fnmatch.c 
strings/apr_snprintf.c 
strings/apr_strings.c 
strings/apr_strnatcmp.c 
strings/apr_strtok.c 
tables/apr_hash.c 
tables/apr_tables.c 
threadproc/win32/proc.c 
threadproc/win32/signals.c 
threadproc/win32/thread.c 
threadproc/win32/threadpriv.c 
time/win32/time.c 
time/win32/timestr.c 
user/win32/groupinfo.c 
user/win32/userinfo.c  
misc/win32/rand.c

多分、これがWin32のためのソースであってると思います。
一応、VisualStudioで作ったときとソースの数だけは確かめたので・・・・

Darwin-mingw32.txt

set(CMAKE_SYSTEM_NAME "Windows")
set(CMAKE_BUILD_TYPE "Release")
set(MINGW_PREFIX "/opt/local/bin/i386-mingw32-")
SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "-Wl,--no-undefined -static-libgcc -Wl,-O1 -Wl,--as-needed -Wl,--sort-common -s")

set(CMAKE_C_COMPILER     ${MINGW_PREFIX}gcc)
set(CMAKE_CXX_COMPILER ${MINGW_PREFIX}g++)
set(CMAKE_AR           ${MINGW_PREFIX}ar)
set(CMAKE_RANLIB       ${MINGW_PREFIX}ranlib)
set(CMAKE_LINKER       ${MINGW_PREFIX}ld)
set(CMAKE_STRIP        ${MINGW_PREFIX}strip)

set(CMAKE_EXECUTABLE_SUFFIX ".exe")

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
お仕事のご依頼・相談を承ります
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら

Leave a Reply

お仕事のご依頼・相談
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら
ソフトウェア&ライブラリ




ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
執筆書籍
本、雑誌等

WEB記事:CodeZine
執筆記事はこちら
カレンダー
2012年3月
« 2月   4月 »
 1234
567891011
12131415161718
19202122232425
262728293031  

カスタム検索
RSS
Add to Google < !–adsense–>
アーカイブ
カテゴリ
にほんブログ村 IT技術ブログへ