プログラム開発

Last update 1995/12/19
Since: 1995/12/19
History -- here -- Quick Reference

付録 A : C によるプログラム開発
付録 B : Make

参考文献

  1. コンパイル
  2. archive
  3. a) 保守 作成 % cc -c file1.c [-o file1.o] % cc -c file2.c [-o file2.o] % cc -o file file1.o file1.o % ar r file.a file1.o file2.o % ranlib file.a 内容の確認 % ar -tv archive.a > temp.list % ar -tv archive.a filename.o 入替え % ar -r archive.a filename.o 削除 % ar -d archive.a filename.o b) 参照 /lib あるいは /usr/lib 下の xxx % cc -o prog *.o -lxxx カレントディレクトリの archive % cc mine.c libnew.a

  4. cc の options(HI-UX 固有)
  5. 最適化 -O* * = 1-4, -O = -O2

  6. C と Fortran のリンク(HI-UX 固有)
  7. a) エントリ名称 Fortran program の entry name は英小文字で、末尾に underscore(_) が付くものを KEK 標準とします。  上記の標準以外の形式にする場合には、Fortran の手引を参照して下さい。 b) リンクの例 ex1) % f77 -c main.f % cc -c sub.c % f77 -o main main.o sub.o ex2) % cc -c cmain.c % f77 -c sub.f % cc cmain.o sub.o -lf77 ( % ld /lib/crt0.o cmain.o sub.o -lc -lf77 ← Sun? ) ex3) メインが C の場合   Fortran を関数またはサブルーチンとして使用する場合(95/12/18, 飯田氏) % f77 -c -s,INIT sub.f

  8. make
    1. macro 定義, 依存関係定義の listing
        % make -p

    2. 自分用の Fortran の compile option の設定 (HI-UX 固有)
      環境変数の設定の以下のコマンドを .cshrc あるいは .login に記述しておくと, make コマンドで compile するときの標準値になります.
        setenv FFLAGS "-i,E,U,P,PL,LT,L,EU,CL,CU,-W0,'LANGLVL(CONTI99,DARG(L),H8000)'"
      (1995/3 以降に account を取得した user には, 初期設定がされています.)
      Makefile で指定することもできます.
        FFLAGS -i,E,U,P,PL,LT,L,EU,CL,CU,-W0,'LANGLVL(CONTI99,DARG(L),H8000)'

    3. 使い方
        % make
          makefile の検索順番 : makefile --> Makefile
        % make target
        % make -f
        % make -n
          起動するコマンドを標準出力に出力するだけで、実行しない。
        % make [マクロ定義] [target]
        % make -r
          make の中で定義されている SUFFIXES を無効にする。

    4. makefile の例
      ccws13% more ~ftp/vos3/converters/makefile 
      FFLAGS = -i,E,U,P,PL,LT,L,EU,CL,CU -W0,'LANGLVL(CONTI199,DARG(L),H8000)'
      
      sample:         fconv.o \
             	        sample.o
      (TAB)	f77 $(FFLAGS) -o sample sample.o fconv.o
      
      fconv.o:
      (TAB)	cc -c fconv.c
      
      sample.o:
      (TAB)	f77 $(FFLAGS) -c sample.f
      
    5. makefile 記述の規則
      ターゲット/依存関係行 1桁目から書く (ex.) sample: fconv.o sample.o
      コマンド行 先頭はタブ (ex.) cc -c fconv.c
      推論規則 付録Bを参照のこと
      コメント # ではじまる。次行に継続しない。
      行の継続 行末に \
    6. マクロ定義
      c) の例の FFLAGS はマクロ定義.
      make 実行時のマクロ定義の置換えの例
        % make FFLAGS=" -W0,'LANGLVL(CONTI199,DARG(L),H8000)'"

    7. マクロによるファイル名の展開
      $@ : Target ファイル名に展開する。
      $* : Target ファイル名から suffixes 以降を除いたものに展開する。
      $? : Target ファイル名より更新時刻の新しいファイル名を展開する。
      $< :
         例)
      	OBJ = prog1.o prog2.o prog3.o
      	target.out : $(OBJ)
      		$(CC) -o $@ $(OBJ)
      		echo #? was recompiled.
      		cp $@ bin/$*
      

    8.    例) コマンド行を表示しない。
        @ echo " $? wad recompiled."

    9. sub-directory (ディレクトリを変えて実行する)の例
      
      SUBDIR = lib usr.lib bin usr.bin etc ucb games local
      
      all:	$(SUBDIR)
      
      $(SUBDIR):
      	cd $@; make $(MFLAGS)
      
      install:
      	for i in $(SUBDIR); do \
      		(cd $$1; make $(MFLAGS) DESTDIR=$(DESTDIR) install); done
      
      clean:
      	rm -f a.out core *.s *.o
      	for i in $(SUBDIR); do (cd $$1; make $(MFLAGS) clean); done
      
    10. make によるライブラリの作成規則
      makefile の例
        lib.a : lib.a(func1.o) lib.a(func2.o)lib.a(func3.o)

付録A: C によるプログラム開発

    A-1. 概念図

            ________  ________
            |      ↓↓       |		cb: 清書プログラム
           cb  <--  vi  -->  lint		    % cb < main.c >new.c
                    ↓			lint: 文法検査
    		cc			    % lint -axc main.c
                   |↓
                   |ld
                   ↓↓
                   a.out
                    ↑
                    dbx
    

    A-2. C compiler

    	    /lib/cpp	Preprocessor(#include の展開)
    		↓
    	    /lib/ccom	Compiler Path1
    		↓
    	    /lib/c2	Compiler Path2 (.s の作成) (??, 95/8/21)
    		↓
    	    /bin/as	Assembler (.o の作成)
    		↓
    	    /bin/ld	Linkage editor (a.out の作成)		
    

    A-3. cc のオプション

    A-4. Shared library (HP-UX および HI-UX 固有)



付録B Make

    b-1. 動作原理

    b-2. マクロ

    1. 内部マクロ
      以下のコマンドで参照できます。
        % make -p
          $@
          カレントターゲット
          $*
          拡張子を除くターゲット名
          $<, $?
          ターゲットよりも後に更新された依存ファイル。推論規則の中でのみ利用可能
  1. ユーザ定義マクロ
    環境変数はマクロとして使えます。

    b-3. 疑似ターゲット

    1. ユーザ定義疑似ターゲット
        例) clean:
          \rm *.o core
    2. 内部疑似ターゲット
      以下のコマンドで参照できます。
        % make -p
          .SUFFIXES: 内部リストの無効化
          .SUFFIXES:.icn .tex 内部リストへの追加

    b-4. 推論規則 (suffix rule)


History

2000/ 6/29      Converted to HTML format.