___ _ __ ___ _ __ ___ | |(_)| |__
/ __|| '_ ` _ \ | '_ \ _____ / __|| || || '_ \
| (__ | | | | | || | | ||_____|| (__ | || || |_)
\___||_| |_| |_||_| |_| \___||_||_||_.__/
cmn-clibはWindows/Linuxで動作するC言語ライブラリです。
スタティックリンクもしくはダイナミックリンク(まだTODOです)により
アプリケーションからリンクして使うことを想定しています。
以下、cmn-clibのビルド方法や使い方、その他メモなどを記載します。
プロジェクト構成
・inc # ヘッダーファイルです。ヘッダーファイル名は「サブモジュール名.h」です。
・src # ソースファイルです。サブモジュール単位にディレクトリで分ます。
・test # テストコードです。(自作jUnitみたいなものです)
・doc # ドキュメントです。Doxygenを使っています。
・debug # Windows用のビルドファイル格納場所です。
・build # Linux用のビルドファイル格納場所です。
<ドキュメント>
ドキュメントにはdoxygenを使っています。ドキュメント生成手順は以下です。
doc/html/index.htmlがドキュメントのトップページとなります。
・Windowsの場合
プロジェクトフォルダ直下に移動してdoxygen.exeを実行する。
・Linuxの場合
$ cd {git}/cmn-clib
$ doxygen
<その他>
・ctags.exe, doxygen.exe # Windows上でtags作成およびドキュメント作成を行うために用意したEXE
・Doxyfile # doxygen設定ファイル
プロジェクトのビルド方法
■Windows
<VisualStudio2019>
gitチェックアウト後、cmn-clib.slnから起動します。
ビルドターゲット「Debug」もしくは「Release」でビルドして実行するとテストモードで実行されます。
(自作jUnitみたいなもんです)
コンソール画面に各モジュールのテスト結果が表示されますので、全てOKでしたら問題なしです。
ビルドターゲット「static-lib」でビルドするとスタティックライブラリを生成します。
「{git}/x64/static-lib/cmn-clib.lib」が出力されますので、これを目的アプリケーションにリンクすれば利用できます。
<Eclipse(C/C++2019-12)>
いちおうEclipseでもビルドできるようになっていますが、たまにしかメンテしないので警告やエラー出るかも?
(Eclipseで使っているMinGwに同梱されている標準ライブラリがVS標準ライブラリとI/F違うケースがるため)
VSと同じくビルド構成「Debug」「Release」でテストモード実行、
「lib」でスタティックライブラリの生成となります。
■Linux
gcc+makeでビルドします。
$ cd {git}/cmn-clib
$ make
{git}/cmn-clib/build に実行ファイルが生成されます。
・test_main # テスト実行ファイルです。実行するとテストモードで起動します。
・cmn-clib.a # スタティックライブラリです。
テスト実行手順
$ {git}/cmn-clib
$ build/test_main # カレントディレクトリはcmn-clibで実行してください。
■挙動を変えるマクロ
・Common.h:CMN_CLIB_HI_PERFORMANCE
defineされているとトレースログの省略等を行ったハイパフォーマンスモードでビルドします。
VisualStudioのReleaseビルドではCMN_CLIB_HI_PERFORMANCEが自動で有効になるよう設定しています。
Linuxの場合はMakefileを編集してgccオプションに「-DCMN_CLIB_HI_PERFORMANCE」を付与してください。
もしくはCommon.hを編集しちゃった方が手っ取り早いかもですね。
cmn-clibの利用方法(リンク方法)
■ヘッダーファイルのコピー
cmn-clib/inc/配下のヘッダーファイルを自プロジェクトに取り込んでincludeしてください。
「cmnclib.h」でcmn-clibのすべての関数群が利用できます。(例:include "cmnclib.h")
個別機能のみ読み込む場合はcmnclibフォルダ配下の個別ヘッダを読み込んでください。(例:#include "cmnclib/CommonData.h")
★注意点
・WindowsでCommonNetを利用する場合、Windows.hよりも本プロジェクトのヘッダファイルを先に読み込んで下さい。
(Windows.hよりもWinSock2.hを読み込まないといけない関係上です)
■スタティックライブラリのリンク
・Windows(VisualStudio)
「{git}/x64/static-lib/cmn-clib.lib」を任意のパスにコピーし、そのファイルを以下に追加してください。
プロジェクトのプロパティから[構成プロパティ]→[リンカー]→[入力]→[追加の依存ファイル]
・Linux(gcc)
「{git}/cmn-clib/build/cmn-clib.a」を任意のパスにコピーし、gccのリンク対象に追加してください。
$ gcc -o application application.o {コピーしたパス/}cmn-clib.a
もしくはcmn-clib.aをlibcmn-clib.aにリネームして以下でも。
$ gcc -o application application.o -L{コピーしたパス} -lcmn-clib
命名規則
■コーディング
<ヘッダファイル名>
[ライブラリ名].h
例:CmnData.h
<ソースファイル名>
[ライブラリ名][サブモジュール名].c
例:ライブラリ名:CmnData
サブモジュール名:List
=CmnDataList.c
<構造体>
構造体名
[ライブラリ名][固有名]
例:CmnDataList, CmnDataListItem
メンバ名
変数と同じ。
非公開メンバはアンダーバーで始めます。
<関数名>
[ライブラリ名][固有名]_[動詞][名詞]
例:CmnDataList_Create
CmnDataList_GetFirst
※非公開関数は先頭小文字で始めます。
cmnLogEx_PutLog
<定数マクロ名>
全て大文字のアンダーバー区切り
[ライブラリ名]_[固有名]_[名詞]
例:CMN_TIME_FORMAT_ALL
<関数マクロ名>
検討中
<enum名>
Enum名
構造体名と同じ
[ライブラリ名][固有名]
Enumメンバ
定数マクロ名と同じ
[ライブラリ名]_[固有名]_[名詞]
例:
typedef enum {
CMN_TIME_FORMAT_ALL,
CMN_TIME_FORMAT_DATE,
} CmnTimeFormatType
<禁止事項>
・stdbool.hと_Boolは使用禁止
※VC++から本ライブラリのヘッダファイルを読み込んだ際にエラーが発生するため
(C++では_Bool定義がスキップされ型不正になる)
コーディング上の注意点
■公開関数のプロトタイプ宣言
公開関数については、関数プロトタイプの先頭に「D_EXTERN」をつけて下さい。
/* プロトタイプ */
D_EXTERN char *CmnTime_GetFormatTime(int type, char *buf);
D_EXTERNはCommon.hにて以下のように定義しており、
将来的にダイナミックリンクライブラリを生成できるようにするために必要な識別子となります。
---------------------------------
Source code : github(
https://github.com/kumagaihs/cmn-clib)
Powered by ITよろずネット(
https://ityorozu.net/)