[출처] http://www.viper.pe.kr/docs/make-ko/make-ko_6.html


타겟-종속적인 변수 값( Target-specific Variable Values)

make 에 있는 변수값들은 보통 전역적이다; 즉, 그들이 평가된 위치와 상관없이 이들은 동일하다(물론 그들이 리셋되지 않는다면). 한가지 예외는 자동 변수들의 경우이다 (see section 자동 변수들(Automatic Variables)).

다른 예외는 타겟-종속 변수 값(target-specific variable values)이다. 이 기능은 동일한 변수에 대해서, make 가 현재 빌드하고 있는 타겟에 기반해서, 다른 값들을 정의할 수 있도록 한다. 자동변수의 경우 이런 값들은 단지 타겟의 명령 스크립트의 내용안에서(그리고 다른 타겟-종속적인 할당에서)만 사용 가능하다.

타겟-종속적인 변수값은 다음과 같이 설정한다:

target ... : variable-assignment

또는 다음과 같이 정의한다:

target ... : override variable-assignment

다수의 target 값들은 타겟 리스트의 각 멤버에 대해서 타겟-종속적인 값을 개별적으로 생성한다.

variable-assignment 는 할당의 유효한 형태이면 아무거나 된다; 재귀적 (`='), 정적 (`:='), 덧붙이기 (`+=', 또는 조건 (`?='). variable-assignment에 나타나는 모든 변수들은 타겟의 내용물 안에서 평가된다: 그래서 임의의 사전-정의된 타겟-종속적인 변수 값들이 효력을 발휘할 것이다. 이 변수는 실제로 어떤 "전역" 값과도 구분이 된다는 점에 주목하자: 두 변수들이 동일한 취향(재귀적 vs. 정적)을 반드시 가질 필요는 없다.

타겟-종속적인 변수들은 다른 makefile 변수와 동일한 우선순위를 가진다. 명령행에서 주어진 변수들이(그리고 `-e' 옵션이 주어졌다면 환경에서 주어진 변수들이) 우선권을 가질것이다. override를 지정하는 것은 타겟-종속 변수 값이 더 선호되도록 할 것이다.

타겟-종속적인 변수들의 특수한 기능이 하나 더 있다: 타겟-종속적인 변수를 정의할 때 그 변수의 값이 또한 이 타겟의 모든 종속물들에 대해서도 영향을 미친다(단 이런 종속물들이 그들 자신의 타겟-종속적인 변수 값으로써 그것을 오버라이드하지 않았다면 말이다). 그래서 예를 들면 다음과 같은 문장은:

prog : CFLAGS = -g
prog : prog.o foo.o bar.o

CFLAGS`prog'에 대한 명령 스크립트에서 `-g'로 설정할 것이다. 그러나 이것은 또한 CFLAGS`prog.o', `foo.o', 그리고 `bar.o'를 생성하는 명령 스크립트안에서, 그리고 이들의 종속물들을 생성하는 임의의 명령 스크립트들을 생성하는 명령 스크립트들 안에서 `-g'로 설정할 것이다.

패턴-종속적인 변수값(Pattern-specific Variable Values)

타겟-종속적인 변수값 (see section 타겟-종속적인 변수 값( Target-specific Variable Values)) 에 덧붙여서, GNU make는 패턴-종속적인 변수값을 지원한다. 이 형에서 변수는 지정된 패턴과 일치하는 임의의 타겟에 대해서 정의된다. 이런식으로 정의된 변수들은, 그 타겟에 대해서 명시적으로 정의된 임으의 타겟-종속적인 변수들 이후에, 그리고 타겟 종속적인 변수가 어버이 타겟에 대해서 정의되기 전에, 검색된다.

패턴-종속적인 변수값은 다음과 같이 지정한다:

pattern ... : variable-assignment

또는 다음과 같이:

pattern ... : override variable-assignment

여기서 pattern 는 %-패턴이다. 타겟-종속 변수값과 동일하게 다수의 pattern 값들이 각 패턴에 대해서 개별적으로 패턴-종속 변수값을 생성한다. variable-assignment 는 유효한 할당이면 무엇이든 된다. 임의의 명령행 변수 설정이, override가 지정되지 않았다면, 더 높은 우선순위를 가진다.

예를 들어서:

%.o : CFLAGS = -O

이것은 패턴 %.o와 일치하는 모든 타겟들에 대해서 `-O'CFLAGS의 값으로 할당할 것이다.


[출처] http://woogyun.tistory.com/167

Unix의 vi로부터 유래된 vim이라는 편집기가 있다. Unix의 vi은 거창하게도 시각적(VIsual)인 편집기지만 이젠 골동품처럼 취급되는 편집기다. 모드 방식 편집기이기 때문에 초보자가 사용하기 매우 어렵다. 그런데도 불구하고 열광적인 팬이 많은 관계로 Windows용 vi도 사용되고 있다.

서론이 매우 길었다. Vim으로 텍스트 파일을 열고 다음 문자를 그대로 타이핑한 다음 엔터를 누르면 신기하게도 줄 단위로 정렬이 된다.

:sort

역순으로 정렬하고 싶다면 다음 명령어를 쓰면 된다.

:sort!

맨 앞에 있는 필드가 숫자고, 숫자를 기준으로 정렬하고 싶다면 sort 명령어에 n 옵션을 쓰면 된다.

:sort n

숫자를 기준으로 하지 않으면 그냥 ascii 코드 순서대로 정렬하기 때문에 9보다 10이 앞에 나온다. 숫자를 기준으로 정렬하되 역순으로 정렬하고 싶다면 sort! 명령어에 n 옵션을 쓰면 된다.

:sort! n

[출처] http://www.lws.pe.kr/46

ctrl + l

혹은

~/.bashrc 에 다음의 한줄 추가
alias clear='echo -e "\E[2J"'

[출처] http://www.mapoo.kr/entry/OpenProj-%EC%BA%98%EB%A6%B0%EB%8D%94-%EB%B0%8F-%EA%B8%B0%EB%B3%B8-%EC%9E%91%EC%97%85%EC%8B%9C%EA%B0%84-%EC%84%A4%EC%A0%95

OpenProj의 기본 일별 작업 시간이 한국실정과 맞지 않아서 오전 9 ~ 오후 6시로 맞추는 것임.
원하는대로 세팅이 안되서 한참을 테스트해보다가 세팅방법을 알아냄.
참고로 점심 시간 1시간은 빠진 시각이 적용.


<1> '작업시간 변경' 메뉴에서 기본 세팅.
1. 도구 - 작업 시간 변경... - 메뉴를 띄움
2. Ctrl 키를 누른채로 월 ~ 금 까지 클릭
3, From: 8:00 을 9:00으로 변경, To: 17:00 을 18:00으로 변경
4. 공휴일만 따로 클릭해서 '작업 시간 아님'을 체크 후 확인

<2> 프로젝트 시작일을 변경
1. 프로젝트 - 프로젝트 - 시작일의 오전 8:00을 오전 9:00으로 수정.


* 만약 사용자 캘린더를 설정하고자 하면
'작업시간 변경' 메뉴에서 New를 클릭하고 별도의 사용자 '작업시간 변경'을 만들면 된다.
그리고 프로젝트 - 프로젝트 정보 창에서 기본 캘린더를 '직접만든표'를 선택한다.
그리고 위의 <2> 프로젝트 시작일 변경을 한다.

'기타' 카테고리의 다른 글

[linux] vim에서 내용 정렬하기  (0) 2012.03.12
[cygwin] clear 명령  (0) 2012.02.24
[Makefile] 변수내용치환, for loop  (0) 2012.02.23
[C] hash table for C  (0) 2012.02.23
[perl] cygwin에서 debug시 오류나고 실행안될 때  (0) 2012.02.22
GNU make일 경우...

# 변수 치환

PAIRs=data/wikidic.txt data/chat_DB.txt
UTTs=$(subst:.txt=.utt)

# Makefile loop
#(foreach var, list , loop command with var; )

$(foreach txtfile,$(PAIRs),./splitUtt.pl $(txtfile) > $(txtfile:.txt=.utt);)

[출처] http://www.sourcecodesworld.com/source/show.asp?ScriptID=1188

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct _node{
 char *name;
 char *desc;
 struct _node *next;
}node;

#define HASHSIZE 101
static node* hashtab[HASHSIZE];

void inithashtab(){
 int i;
 for(i=0;i<HASHSIZE;i++)
  hashtab[i]=NULL;
}

unsigned int hash(char *s){
 unsigned int h=0;
 for(;*s;s++)
  h=*s+h*31;
 return h%HASHSIZE;
}

node* lookup(char *n){
 unsigned int hi=hash(n);
 node* np=hashtab[hi];
 for(;np!=NULL;np=np->next){
  if(!strcmp(np->name,n))
   return np;
 }

 return NULL;
}

char* m_strdup(char *o){
 int l=strlen(o)+1;
 char *ns=(char*)malloc(l*sizeof(char));
 strcpy(ns,o);
 if(ns==NULL)
  return NULL;
 else
  return ns;
}

char* get(char* name){
 node* n=lookup(name);
 if(n==NULL)
  return NULL;
 else
  return n->desc;
}

int install(char* name,char* desc){
 unsigned int hi;
 node* np;
 if((np=lookup(name))==NULL){
  hi=hash(name);
  np=(node*)malloc(sizeof(node));
  if(np==NULL)
   return 0;
  np->name=m_strdup(name);
  if(np->name==NULL) return 0;
  np->next=hashtab[hi];
  hashtab[hi]=np;
 }
 else
  free(np->desc);
 np->desc=m_strdup(desc);
 if(np->desc==NULL) return 0;

 return 1;
}

/* A pretty useless but good debugging function,
  which simply displays the hashtable in (key.value) pairs
*/
void displaytable(){
 int i;
 node *t;
 for(i=0;i<HASHSIZE;i++){
  if(hashtab[i]==NULL)
   printf("() ");
  else{
   t=hashtab[i];
   printf("(");
   for(;t!=NULL;t=t->next)
 printf("(%s.%s) ",t->name,t->desc);
   printf(") ");
  }
 }
}

void cleanup(){
 int i;
 node *np,*t;
 for(i=0;i<HASHSIZE;i++){
  if(hashtab[i]!=NULL){
   np=hashtab[i];
   while(np!=NULL){
 t=np->next;
 free(np->name);
 free(np->desc);
 free(np);
 np=t;
   }
  }
 }
}

#ifdef __TEST_MAIN__
int main(int argc, char *argv[]){
 int i;
 char* names[]={"name","address","phone","k101","k110", "k110"};
 char* descs[]={"Sourav","Sinagor","26300788","Value1","Value2", "Value3"};
 FILE *fp = NULL;


 inithashtab();
 for(i=0;i<6;i++)
  install(names[i],descs[i]);

 printf("Done ");
 printf("If we didnt do anything wrong.." "we should see %s ",get("k110"));

 install("phone","9433120451");

 printf("Again if we go right, we have %s and %s ",get("k101"),get("phone"));

 displaytable();
 cleanup();
 return 0;
}
#endif


 

ActivePerl이 깔려서 그것에 의해 perl이 돌아가는 경우 이런 경우가 생겼다.

cygwin에서 perl package를 새로 깔면 잘 동작함

'기타' 카테고리의 다른 글

[Makefile] 변수내용치환, for loop  (0) 2012.02.23
[C] hash table for C  (0) 2012.02.23
[perl] 시간, 날짜 얻기 2  (0) 2012.02.22
[perl] 시간, 날짜 얻기  (0) 2012.02.21
[perl] autoflush 를 켜기  (0) 2012.02.21

아래는 localtime이 동작이 잘되지 않아서 GMT와 같이 나오는 경우를 처리하기 위한 코드도 포함됨 (잘되면 사실상 불필요)


use Time::Local;

sub get_datestr {
    my ($flag) = @_;
    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = gmtime;
    my $g_time = timegm($sec, $min, $hour, $mday, $mon, $year);

    ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime;
    my $l_time = timelocal($sec, $min, $hour, $mday, $mon, $year);

    if( $g_time == $l_time ) {
        # GMT+9로 변경
        $l_time += 60 * 60 * 9;
        ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($l_time);
    }

    my $date_str = sprintf("%4d%02d%02d",$year+1900,$mon+1,$mday);
    my $time_str = sprintf("%02d%02d%02d",$hour,$min,$sec);

    if( not defined $flag ){
        return $date_str.'_'.$time_str;
    }
    else {
        return $date_str;
    }
}

+ Recent posts