cmn-clib(CommonLibraryForC)
C言語共通ライブラリ
 全て データ構造 ファイル 関数 変数 型定義 列挙型 列挙値 マクロ定義
cmn-clib(CommonLibraryForC) 詳解
  ___  _ __ ___   _ __           ___ | |(_)| |__
 / __|| '_ ` _ \ | '_ \  _____  / __|| || || '_ \
| (__ | | | | | || | | ||_____|| (__ | || || |_) 
 \___||_| |_| |_||_| |_|        \___||_||_||_.__/

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/