Windows Batch 파일(.BAT)에서 IF 문에서 수식 사용

IF 문에서 수식을 사용하고 싶을 때, 예를 들면, 에러 체크를 위해 루프를 도는 개수등을 카운트하고 싶다면 SET 에서 /A 옵션을 사용하고 IF에서 비교 연산자를 사용하면 된다. IF 문의 비교 연산자는 다음과 같다

EQU – 같음
NEQ – 같지 않음
LSS – 보다 작은
LEQ – 작거나 같음
GTR – 보다 큰
GEQ – 크거나 같음

다음은 start 로 3가지 일을 동시에 처리한 후 goto와 label을 이용, cygwin의 delay로 일정 시간 체크한 후 그 후 에러로 처리하는 bat 파일의 예다.

@echo off
SET /A LOOP_COUNT=1
SET /A LOOP_MAX_COUNT=5
SET CYGWIN_DELAY=[Cygwin 경로]\delay.exe
SET DELAY_TIME=5m

rem WORK1, 2, 3를 동시에 돌린다. 다음 작업에 dependency 가 있는 작업에
rem start의 /W 옵션을 주어 기다리도록 한다.

start WORK1.bat
start WORK2.bat
start /W WORK3.bat

goto CHECK

:DELAY
rem if LOOP_COUNT >= LOOP_MAX_COUNT
IF %LOOP_COUNT% GEQ %LOOP_MAX_COUNT% (

echo ERROR!

exit 1

)
rem Delay 한다.
%CYGWIN_DELAY% %DELAY_TIME%

rem LOOP_COUNT += 1
SET /A LOOP_COUNT+=1

:CHECK
echo Checking…
IF [WORK1 실패조건] (


echo Work 1 is Failed!

goto DELAY

)
echo Work1 is success!
IF [WORK2 실패조건] (

echo Work 2 is Failed!

goto DELAY

)
echo Work2 is success!
IF [WORK3 실패조건] (

echo Work 3 is Failed!

goto DELAY

)
echo Work3 is success!

call WORK4.bat

Unicode string를 MBCS string으로 바꾸는 방법

1. WideCharToMultiByte() API를 호출하는 방법
2. CRT 함수 wcstombs() 를 호출하는 방법
3. CString 생성자나 assign을 통한 방법(MFC만 가능)
4. ATL string 변환 매크로를 이용하는 방법

WideCharToMultiByte

// Assuming we already have a Unicode string wszSomeString…
char szANSIString [MAX_PATH];

    WideCharToMultiByte ( CP_ACP,                // ANSI code page
                          WC_COMPOSITECHECK,     // Check for accented characters
                          wszSomeString,         // Source Unicode string
                          -1,                    // -1 means string is zero-terminated
                          szANSIString,          // Destination char string
                          sizeof(szANSIString),  // Size of buffer
                          NULL,                  // No default character
                          NULL );                // Don’t care about this flag

wcstombs

    wcstombs ( szANSIString, wszSomeString, sizeof(szANSIString) );

CString

// Assuming we already have wszSomeString…

CString str1 ( wszSomeString );    // Convert with a constructor.
CString str2;

    str2 = wszSomeString;          // Convert with an assignment operator.

ATL Macro

#include <atlconv.h>

// Again assuming we have wszSomeString…

{
char szANSIString [MAX_PATH];
USES_CONVERSION;  // Declare local variable used by the macros.

    lstrcpy ( szANSIString, OLE2A(wszSomeString) );
}

참고 : Introduction
to COM – What It Is and How to Use It.
by Michael Dunn

NMake – Makefile 내부의 인라인 파일

NMake를 사용할 때 Makefile 내부에 파일을 내장해서(인라인 파일) 사용할 수 있다.
형식은 다음과 같다.

<<[Filename]
파일 내용
<<[KEEP or NOKEEP]

위와 같은 내용을 Makefile 내부에 써놓으면 << 들 사이의 내용이 파일로 저장되어 사용가능하게 된다. Filename 을 적으면 해당파일명으로 파일이 생성되고 적지 않으면 임의의 이름으로 임시파일이 생성된다. 또한, Make 세션 사용 후에 파일을 남겨두고 싶다면 KEEP을, 아니라면 NOKEEP 또는 아무것도 쓰지 않으면 된다.

파일 내용 안에는 $(변수) 등을 써두면 써둔 “$(변수)”가 아닌 변수로 치환되는 내용이 그대로 들어가므로 편리하다.

참고 : http://msdn.microsoft.com/ko-kr/library/seaaew50(VS.80).aspx

Python import 경로추가, 주석, 함수선언, Dictionary, List, Tuple

파이썬 문서고

Dive into Python

wxPython Tutorial(http://zetcode.com/wxpython/)
구글의 파이썬 튜토리얼 번역

import 경로 추가

import sys;
sys.path.append(‘/mypath’)

주석(문서화에 사용)

“”” 여

줄 주석 “””

함수 선언

def functionname(parameter):
    body

Dictionary : {, } 사용, 순서라는 개념 없음

dic = { <key1>:<value1>, <key2>:<value2> }

Dictionary Data 제거

del dic[<key>]

Dictionary의 모든 element 삭제

dic.clear()

List : [, ] 사용, 인덱스 사용. Element가 중복 존재 가능

li = [ <element1>, <element2> ]

음수 인덱스 사용가능. -1이 가장 끝

li[-1]

List slice

li[1:3] 1, 2번째 인덱스의 원소의 리스트를 새로 생성
li[:] 리스트의 복사본 생성

List 원소 추가

li.append(<element>)
li.insert(<index>, <element>)
li.extend(<list>)

List 검색
list 내의 가장 첫번째 원소의 index

li.index(<element>)

list 에 있는지 검사

<element> in li

List 에서 원소 제거

li.remove(<element>)

가장 마지막 원소 제거하면서 리턴

li.pop()

+ 연산자 : 새로운 리스트를 리턴(extend는 변경)

li = <list1> + <list2>

+= 연산자는 extend와 동일

li += <list>

* 는 반복자로 작동

li = <list> * 3

Tuple : (, ) 사용. 변경 불가능, append, extend, remove, pop, index는 없음, in 으로 검사는 가능, 리스트보다 빠름

tup = ( <element1>, <element2> )

GNU make 확장자 규칙, 패턴 규칙

GNU Make에 대해서 아주 간략하면서도 핵심적인 내용들을 적어놓은 문서가 있길래 모르거나, 쓸 때마다 헷갈렸던 내용들을 정리해 둔다.

확장자 규칙, 패턴 규칙

전통적인 형식

.c.o:

gcc -c ${CFLAGS} $<

GNU make 확장 기능
%.o: %.c
gcc -c -o $@ ${CFLAGS} $<
기호 정리

$< 입력 파일, 콜론의 오른쪽에 오는 패턴을 치환
$@ 출력 파일, 콜론의 왼쪽에 오는 패턴을 치환
$* 입력 파일에서 확장자(.c, .s 등)을 떼어낸 파일명

예제

%_dbg.o: %.c
gcc -c -g -o $@ ${CFLAG} $<

DEBUG_OBJECTS = main_dbg.o edit_dbg.o

edimh_dbg: $(DEBUG_OBJECTS)

gcc -o $@ $(DEBUG_OBJECTS)
매크로 조건
예제
ifdef XPM
LINK_DEF = -DXPM
endif

$make XPM=yes


주의사항
타겟 아래의 명령에 대해서는 하나의 행이 각각의 쉘에서 실행됨. 순차적이 아님. 순차적인 실행을 원할 때는 ‘;’ 와 ‘\’ 를 이용.
예제
target:
cd obj ; \
HOST_DIR=/hom/e ; \
mv *.o $$HOST_DIR

Google Android 관련 Reference & JNI Complie 옵션

예전에 안드로이드 관련 과제를 진행하면서 보았던 Reference 들이다.

1.2 Reference #

[edit]

1.2.2 Android Internal #

이건 아마도 JNI 관련 라이브러리를 만드는 중에 시도했던 삽질 과정 중의 컴파일 옵션들..

  • ./configure –host=arm-none-linux-gnueabi –enable-shared CFLAGS=-fpic CXXFLAGS=-fpic LDFLAGS=-shared
  • ./configure –host=arm-none-linux-gnueabi –enable-shared
    CFLAGS=-fpic CXXFLAGS=-fpic CPPFLAGS=”-fpic -I/usr/local/include/
    -I/usr/lib/jvm/java-6-sun/include
    -I/usr/lib/jvm/java-6-sun/include/linux” LDFLAGS=-shared

이후에 자료들이 많이들 생긴 듯 해서 별로 필요는 없을 듯 하지만, 위키 쪽 자료들을 조금씩 정리하면서 블로그로 옮기고 정리해가자.

2012. 6. 19. 추가
Make shared native library: g++ -shared -I/usr/lib/jvm/java-6-sun/include -I/usr/lib/jvm/java-6-sun/include/linux -o libjnifunc.so jnifunc.cpp
Run: java -Djava.library.path=. JniFuncMain
Geting “Signature”: javap -s -p JniFuncMain