アプリ版:「スタンプのみでお礼する」機能のリリースについて

windows10でgcc 6.3.0をコマンドプロンプトで使用しています。

最近、定義済みマクロについて知りました。
すべてのファイルの保存とコンパイルの日時についてプログラムの実行時に表示するようにすれば、プログラムを更新した後オブジェクトファイルに変換するのを忘れてもプログラム実行時に気が付けると考えました。

しかし、下記の通りにプログラムを作り、main.cの保存時間、SRCFILE2.cの保存時間、SRCFILE2.cからオブジェクトファイルを作成する時間、main.cとSRCFILE2.oからmain.exeファイルの作成時間をずらして行いましたが、last compile(コンパイルを行った時間)がすべてmain.cをコンパイルした時間になってしまいました。
そのため、SRCFILE2.cのコンパイルを行った時間がわかりません。

SRCFILE2.cからオブジェクトファイルを作成した時間を知る方法などオブジェクトファイルの更新を忘れても、後から気が付ける方法があれば教えてください。

使用したコマンドは
gcc -c SRCFILE2.c -o SRCFILE2.o
gcc main.c SRCFILE2.c -o main.exe
main
の順です。

実行結果は
//---------------------------
source file : main.c
last update : Sun Dec 23 20:34:12 2018
last compile: Dec 23 2018 20:38:23

source file : SRCFILE2.c
last update : Sun Dec 23 20:35:06 2018
last compile: Dec 23 2018 20:38:23

マクロによるデータ出力


//------------------------------------
でした。



//--------------------------------------
//SRCFILE2.c
//----------------------------------------
#include <stdio.h>

#include"SRCFILE2.h"

void program_time_SRCFILE2(void){

printf("source file : %s \n", __FILE__);
printf("last update : %s \n", __TIMESTAMP__);
printf("last compile: %s %s\n",__DATE__, __TIME__);
printf("\n");
}
//--------------------------------------

//-----------------------------------
//SRCFILE2.h
//----------------------------------------
#ifndef __SRCFILE2_H
#define __SRCFILE2_H


void program_time_SRCFILE2(void);

#endif
//----------------------------------------

//----------------------------------------
//main.c
//---------------------------------------
#include <stdio.h>
#include"SRCFILE2.h"
//#define DEBUG

void program_time(void);

void debug_printf(char s[]);

int main(void) {

program_time();
program_time_SRCFILE2();

printf("マクロによるデータ出力\n\n");

debug_printf("aa");
}

void program_time(void){
printf("source file : %s \n", __FILE__);
printf("last update : %s \n", __TIMESTAMP__);
printf("last compile: %s %s\n",__DATE__, __TIME__);
printf("\n");
}

void debug_printf(char s[]){
#ifdef DEBUG
printf("%s",s);
#endif
}
//-------------------------------------

A 回答 (3件)

make

    • good
    • 1

うん。


私もmake使うべきだと思います。

>使用したコマンドは
>gcc -c SRCFILE2.c -o SRCFILE2.o
>gcc main.c SRCFILE2.c -o main.exe
>main
>の順です。
ならば、
>source file : main.c
>last update : Sun Dec 23 20:34:12 2018
>last compile: Dec 23 2018 20:38:23
>source file : SRCFILE2.c
>last update : Sun Dec 23 20:35:06 2018
>last compile: Dec 23 2018 20:38:23
は、正しいですよね?

>last compile(コンパイルを行った時間)がすべてmain.cをコンパイルした時間になってしまいました。

間違ってませんよ?
1回目にコンパイルしてオブジェクトファイルにしたものは、2回目に『SRCFILE2.cをコンパイルして上書き』したのですから。
2回目に指定しているのがSRCFILE2.“o”だったら、1回目と2回目の実行時間分ズレたのでしょうけど。
    • good
    • 0
この回答へのお礼

makeについて初めて知りました。
これは調べてみるとファイル分割を行う上では重要だと感じました。
早速使っていきたいです。

2回目に指定しているものをSRCFILE2.“o”にすべきでしたね。
SRCFILE2.“o”で行うと表示される二つのコンパイルした時間をずらすことができました。
こういったミスもmakeを使っていけば減らしていけるのでしょうね。

回答ありがとうございました。

お礼日時:2018/12/24 11:04

>main.cとSRCFILE2.oからmain.exeファイルの作成時間をずらして行いましたが、



>gcc main.c SRCFILE2.c -o main.exe
と、合ってない。全ソース再コンパイルしてるよ。

何れにしても make のスクリプト書けば心配事は自動化出来ますが、
gccの使い方が分かってないとスクリプトは書けません。
    • good
    • 0
この回答へのお礼

確かに全ソースを再コンパイルしていました。

こういったことがないようにしていきたいです。

回答ありがとうございます。

お礼日時:2018/12/26 02:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!