'프로그램 사용/make, configure'에 해당되는 글 28건

  1. 2015.12.14 make 매크로
  2. 2015.11.30 make -j -l
  3. 2015.11.30 makefile 병렬 대비하기
  4. 2014.11.11 make burn 0.0.0 ???
  5. 2014.09.12 make를 조용하게
  6. 2011.10.07 cmake 사용
  7. 2010.05.18 cross compile 초기화 하기
  8. 2010.04.06 cmake - cross make
  9. 2010.04.03 makefile 에서 컴파일할 목록 생성하기
  10. 2010.03.31 makefile 정렬하기 (2)


$* <- 확장자가 없는 현재의 목표 파일(Target)

$@ <- 현재의 목표 파일(Target)

$< <- 현재의 목표 파일(Target)보다 더 최근에 갱신된 파일 이름

$? <- 현재의 목표 파일(Target)보다 더 최근에 갱신된 파일이름


[링크 : https://wiki.kldp.org/KoreanDoc/html/GNU-Make/GNU-Make-3.html]


$@

규칙에 있는 타겟의 파일 이름. 타겟이 아카이브 멤버이면 `$@'는 아카이브 파일의 이름이다. 여러개의 타겟들(see section 패턴 규칙에 대한 소개(Introduction to Pattern Rules))을 가지고 있는 패턴 규칙에서 `$@'는 규칙의 명령이 실행되도록 만든 타겟이면 무엇이든 이 타겟의 이름이 된다.

$%

타겟이 아카이브 멤버(See section 아카이브 파일을 갱신하기 위해서 make 사용하기(Using make to Update Archive Files))일 때, 타겟 멤버 이름. 예를 들어서 타겟이 `foo.a(bar.o)'이면 `$%'는 `bar.o'이고 `$@'는 `foo.a'이다. 타겟이 아카이브 멤버가 아니면 `$%'는 빈 것이 된다.

$<

첫번째 종속물의 이름. 타겟이 묵시적 규칙으로부터 그의 명령들을 얻었다면 이것은 묵시적 규칙에 의해서 추가된 첫번째 종속물이 될 것이다 (see section 묵시적 규칙(Using Implicit Rules)).

$?

타겟보다 더 새로운 모든 종속물들의 이름들. 이들 사이에는 스페이스들이 들어간다. 아카이브 멤버들인 종속물들에 대해서 이름이 있는 멤버만이 사용된다 (see section 아카이브 파일을 갱신하기 위해서 make 사용하기(Using make to Update Archive Files)).

$^

모든 종속물들의 이름. 이들 사이에는 스페이스들이 들어간다. 아카이브 멤버인 종속물들에 대해서 이름있는(지정된?) 멤버만이 사용된다 (see section 아카이브 파일을 갱신하기 위해서 make 사용하기(Using make to Update Archive Files)). 타겟은 이것이 의존하는 다른 각 파일들에 대해서 각 파일이 종속물 리스트에서 몇번이나 나왔는가에 상관없이, 딱 한번만 사용한다. 그래서 어떤 타겟을 위해서 한번 이상 종속물을 사용한다면 $^ 의 값은 그 이름을 딱 한번 담고 있는 형태가 된다.

$+

이것은 `$^' 와 비슷하다. 그러나 종속물들이 makefile 에서 리스트된 순서와 나타난 대로 중복되었다고 해도 한번 이상 리스트된다. 이것은 특별한 순서로 라이브러리 파일 이름들을 반복하는 것이 의미가 있는 링크 명령들 안에서 주로 유용하다.

$*

묵시적 규칙이 일치하는 (see section 패턴 비교 방법(How Patterns Match)) 대상 줄기(stem). 타겟이 `dir/a.foo.b' 이고 타겟 패턴이 `a.%.b' 이라면 줄기는 `dir/foo' 이다. 줄기는 관련된 파일들의 이름을 만들때 유용하다. 정적 패턴 규칙에서 줄기는 타겟 패턴에서 `%' 과 일치한, 파일 이름의 일부분을 말한다. 명시적 규칙에서는 줄기가 없다; 그래서 `$*' 는 그런식으로 결정될 수 없다. 대신에 타겟 이름이 인식된 접미사로 끝난다면 (see section 구닥다리 접미사 규칙(Old-Fashioned Suffix Rules)), `$*' 는 타겟 이름 빼기 접미사로 설정된다. 예를 들어서, 타겟 이름이 `foo.c' 이라면, `$*' 는 `foo' 로 설정된다, 왜냐면 `.c' 가 접미사이기 때문이다. GNU make 는 다른 make 구현물과의 호환성을 위해서만 이런 괴기스런 일을 한다. 일반적으로 묵시적 규칙들이나 정적 패턴 규칙들을 제외하고는 `$*' 를 쓰지 않도록 해야 할 것이다. 명시적 규칙 안의 타겟 이름이 인식된 접미사로 끝나지 않는다면 `$*' 는 그 규칙에 대해서 빈 문자열로 설정된다.

[링크 : http://korea.gnu.org/manual/4check/make-3.77/ko/make_10.html#SEC97]



.PHONY는 지원하지 않는 버전도 있음

 .PHONY: clean

clean:

        rm *.o temp


clean: FORCE

        rm $(objects)

FORCE: 


[링크 : http://pinocc.tistory.com/131]

'프로그램 사용 > make, configure' 카테고리의 다른 글

make jobserver unavailable  (0) 2015.12.16
make 아카이브  (0) 2015.12.14
make 매크로  (0) 2015.12.14
make -j -l  (0) 2015.11.30
makefile 병렬 대비하기  (0) 2015.11.30
make burn 0.0.0 ???  (0) 2014.11.11
Posted by 구차니

댓글을 달아 주세요

-j 로 잘못하다가는 시스템 멈춤까지 가는데..

그걸 방지하기 위해 -l 옵션을 쓰는 것도 방법

기본값은 제한없음이니 적당히 설정해두면 좋을지도?

[링크 : http://korea.gnu.org/manual/4check/make-3.77/ko/make_5.html]


-j [jobs], --jobs[=jobs]

Specifies the number of jobs (commands) to run simultaneously. If there is more than one -j option, the last one is effective. If the -j option is given without an argument, make will not limit the number of jobs that can run simultaneously.


-l [load], --load-average[=load]

Specifies that no new jobs (commands) should be started if there are others jobs running and the load average is at least load (a floating-point number). With no argument, removes a previous load limit.


[링크 : http://linux.die.net/man/1/make


'프로그램 사용 > make, configure' 카테고리의 다른 글

make 아카이브  (0) 2015.12.14
make 매크로  (0) 2015.12.14
make -j -l  (0) 2015.11.30
makefile 병렬 대비하기  (0) 2015.11.30
make burn 0.0.0 ???  (0) 2014.11.11
make를 조용하게  (0) 2014.09.12
Posted by 구차니

댓글을 달아 주세요

의존성을 줌으로서

병렬 빌드시 모든 파일이 준비되어야 하도록 해주어야 함


여기서 미묘한 점이 있는데 직렬 질드에서는 make 가 application 의 의존성 목록에서 왼쪽에서 오른쪽으로 작업을 시작할 것입니다. 첫번째로 ${OBJECTS} 의 모든 오브젝트들을 빌드 하고 나서 menu.o 를 빌드하는 규칙을 적용할 것입니다. 이러한 직렬 환경에서는 문제가 없습니다 왜냐하면 menu.o 가 처리될때 필요한 ${OBJECTS} 의 모든 오브젝트들은 이미 제자리에 있을 것이기 떄문입니다. 그러나 병렬 빌드에서 make 는 병렬 환경에서 모든 의존성들을 처리할 수 있으므로 menu.o 의 생성과 컴파일은 모든 오브젝트 들이 준비 되기 전에 시작 될 수 있습니다


   OBJECTS=app.o helper.o utility.o ... 


    application: ${OBJECTS} menu.o 

        cc -o application ${OBJECTS}  menu.o 


    # Automatically generate menu.c from the other modules 

    menu.o: 

        nm ${OBJECTS} | pattern_match_and_gen_code > menu.c 

        cc -c menu.c


    application: ${OBJECTS} menu.o 

        cc -o application ${OBJECTS}  menu.o 


    menu.o: ${OBJECTS} 

        nm ${OBJECTS} | pattern_match_and_gen_code > menu.c 

        cc -c menu.c  


[링크 : http://blog.syszone.co.kr/2099]


+

[링크 : http://forum.falinux.com/zbxe/index.php?document_srl=405822&]

[링크 : http://korea.gnu.org/manual/4check/make-3.77/ko/make_toc.html]

'프로그램 사용 > make, configure' 카테고리의 다른 글

make 매크로  (0) 2015.12.14
make -j -l  (0) 2015.11.30
makefile 병렬 대비하기  (0) 2015.11.30
make burn 0.0.0 ???  (0) 2014.11.11
make를 조용하게  (0) 2014.09.12
cmake 사용  (0) 2011.10.07
Posted by 구차니

댓글을 달아 주세요

make clean
make all 등으로 명령을 주지만
별도의 인자를 주는 일이 거의 없는데
만약 필요하다면

make all ARGS=VAL
이런식으로도 가능하고

make all a b c d e f
$MAKECMDGOAL 을 통해서 받아 올 수 있다고 한다

해봐야지 ㅋㅋ

---
$ cat Makefile
all:
        @echo $@,$(MAKECMDGOALS)


$ make all test 1 2 3
all,all test 1 2 3
make: *** 타겟 `test'를 만들 규칙이 없음.  멈춤.

실험해보니 MAKECMDGOALS는 make 이후의 모든 인자를 
$@는 make에서 사용하는 인자 하나를 제외한 다른 모든 인자를 돌려준다. 
---

[링크 : http://stackoverflow.com/questions/6273608/how-to-pass-argument-to-makefile-from-command-line]
[링크 : https://kldp.org/node/93529]
[링크 : http://www.gnu.org/software/make/manual/make.html#Goals

'프로그램 사용 > make, configure' 카테고리의 다른 글

make -j -l  (0) 2015.11.30
makefile 병렬 대비하기  (0) 2015.11.30
make burn 0.0.0 ???  (0) 2014.11.11
make를 조용하게  (0) 2014.09.12
cmake 사용  (0) 2011.10.07
cross compile 초기화 하기  (0) 2010.05.18
Posted by 구차니

댓글을 달아 주세요

예전에 적은줄 알았는데 없네...


make 안에서

all:
    @gcc helloworld.c

이런식으로 구성하면
해당 구문의 명령은 출력되지 않고
에러 메시지만 출력하게 된다.

[링크 : http://stackoverflow.com/questions/3148492/makefile-silent-remove



Command Echoing

Normally make prints each command line before it is executed. We call this echoing because it gives the appearance that you are typing the commands yourself.

When a line starts with `@', the echoing of that line is suppressed. The `@' is discarded before the command is passed to the shell. Typically you would use this for a command whose only effect is to print something, such as an echo command to indicate progress through the makefile:

@echo About to make distribution files

When make is given the flag `-n' or `--just-print', echoing is all that happens, no execution. See section Summary of Options. In this case and only this case, even the commands starting with `@' are printed. This flag is useful for finding out which commands make thinks are necessary without actually doing them.

The `-s' or `--silent' flag to make prevents all echoing, as if all commands started with `@'. A rule in the makefile for the special target .SILENT without dependencies has the same effect (see section Special Built-in Target Names). .SILENT is essentially obsolete since `@' is more flexible.

[링크 : http://web.mit.edu/gnu/doc/html/make_5.html]  

'프로그램 사용 > make, configure' 카테고리의 다른 글

makefile 병렬 대비하기  (0) 2015.11.30
make burn 0.0.0 ???  (0) 2014.11.11
make를 조용하게  (0) 2014.09.12
cmake 사용  (0) 2011.10.07
cross compile 초기화 하기  (0) 2010.05.18
cmake - cross make  (0) 2010.04.06
Posted by 구차니

댓글을 달아 주세요

Cross Make 인데
정확하게는 makefile을 생성하는 제너레이터 이다.

MakeLists.txt 라는 파일을 생성해 놓으면 그 파일의 정의에 따라 Makefile을 생성하는 툴인데
문법은 흐음... 그리 어려워 보이진 않는 느낌?
 PROJECT(FOO)
 # make sure cmake addes the binary directory for the project to the include path
 INCLUDE_DIRECTORIES(${FOO_BINARY_DIR})
 # add the executable that will do the generation
 ADD_EXECUTABLE(my_generator my_generator.cxx)
 GET_TARGET_PROPERTY(MY_GENERATOR_EXE my_generator LOCATION)
 # add the custom command that will generate all three files
 ADD_CUSTOM_COMMAND(
   OUTPUT ${FOO_BINARY_DIR}/output1.cpp ${FOO_BINARY_DIR}/output2.h ${FOO_BINARY_DIR}/output3.cpp
   COMMAND ${MY_GENERATOR_EXE} ${FOO_BINARY_DIR} ${FOO_SOURCE_DIR}/input.txt
   DEPENDS my_generator
   MAIN_DEPENDENCY ${FOO_SOURCE_DIR}/input.txt
   )
 # now create an executable using the generated files
 ADD_EXECUTABLE(generated
                ${FOO_BINARY_DIR}/output1.cpp
                ${FOO_BINARY_DIR}/output2.h
                ${FOO_BINARY_DIR}/output3.cpp) 

[링크 : http://www.cmake.org/Wiki/CMake_FAQ

윈도우에서는 GUI 툴이 생성을 해주는 것 같다.


linux에서도 gt 나 ncurse로 GUI / CUI 구성이 되어 있는듯 하다
$ apt-cache search cmake
cmake-data - CMake data files (modules, templates and documentation)
cmake - 크로스 플랫폼, 오픈 소스 make 시스템
cmake-curses-gui - Curses based user interface for CMake (ccmake)
cmake-qt-gui - Qt4 based user interface for CMake (cmake-gui)

cmake-curses-gui 의 실행 파일명은 ccmake 이고,
cmake-qt-gui의 실행 파일명은 cmake-gui 이다.


[링크 : http://packages.ubuntu.com/lucid/cmake-curses-gui]
[링크 : http://www.cmake.org/cmake/help/runningcmake.html]  << 사용법

[링크 : http://rgbear.tistory.com/1]
[링크 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Development/Env/cmake]
[링크 : http://semtle.tistory.com/205]

2010/04/06 - [프로그램 사용/make, configure] - cmake - cross make 

'프로그램 사용 > make, configure' 카테고리의 다른 글

make burn 0.0.0 ???  (0) 2014.11.11
make를 조용하게  (0) 2014.09.12
cmake 사용  (0) 2011.10.07
cross compile 초기화 하기  (0) 2010.05.18
cmake - cross make  (0) 2010.04.06
makefile 에서 컴파일할 목록 생성하기  (0) 2010.04.03
Posted by 구차니
TAG cmake

댓글을 달아 주세요

드물게(?) 크로스컴파일을 시도하려다 다시 지우고 컴파일을 하려고 하면 안되는 경우가 있다.
아래는 gdb/insight의 경우인데, 특이하게도 하라는대로 해도 안된다. ㄱ-

configure: loading cache ./config.cache
configure: error: `target_alias' has changed since the previous run:
configure:   former value:  sh4-linux
configure:   current value: i686-pc-linux-gnu
configure: error: changes in the environment can compromise the build
configure: error: run `make distclean' and/or `rm ./config.cache' and start over

이녀석은 make distclean 해도 하위 디렉토리의 config.cache를 개별로 지우지 않기 때문이다.
(음... 알려줘서 원 소스에 넣도록 해야하나?)

미봉책으로는
# make distclean
# find ./ -name config.cache -exec {} \;
를 하면 하위 디렉토리에서 config.cache를 찾아 지우므로 해결된다.

'프로그램 사용 > make, configure' 카테고리의 다른 글

make를 조용하게  (0) 2014.09.12
cmake 사용  (0) 2011.10.07
cross compile 초기화 하기  (0) 2010.05.18
cmake - cross make  (0) 2010.04.06
makefile 에서 컴파일할 목록 생성하기  (0) 2010.04.03
makefile 정렬하기  (2) 2010.03.31
Posted by 구차니

댓글을 달아 주세요



Welcome to CMake, the cross-platform, open-source build system. CMake is a family of tools designed to build, test and package software. CMake is used to control the software compilation process using simple platform and compiler independent configuration files. CMake generates native makefiles and workspaces that can be used in the compiler environment of your choice.

[링크 : http://www.cmake.org/]

oscam을 컴파이르 하는데 cmake 라는것을 요구하길래 먼가해서 검색해 봤더니
cross platform을 지원하는 make 라고 한다.

사용법은
cmake
make 라는데

configure 와 유사한 역활을 하는것으로 보인다.

'프로그램 사용 > make, configure' 카테고리의 다른 글

cmake 사용  (0) 2011.10.07
cross compile 초기화 하기  (0) 2010.05.18
cmake - cross make  (0) 2010.04.06
makefile 에서 컴파일할 목록 생성하기  (0) 2010.04.03
makefile 정렬하기  (2) 2010.03.31
make, gmake  (0) 2010.03.02
Posted by 구차니
TAG cmake

댓글을 달아 주세요

makefile에서
OBJS = a.o b.o
SRC = $(OBJ:.o=.c)

a.o : a.c
b.o : b.c
이런식으로 파일을 일일이 나열을 하는데, 아무래도 귀찮다 -ㅁ-!

하지만 $(wildcard) 라는 함수를 이용하면 나열은 하지 않아도 된다.
SRC = $(wildcard *.c)
OBJ = $(SRC:.c=.o)

이렇게 하면 (의존성은 제외하더라도) 복잡하게 할 필요 없이 간단하게 끝!

[링크 : http://www.viper.pe.kr/docs/make-ko/make-ko_4.html#SEC21]

'프로그램 사용 > make, configure' 카테고리의 다른 글

cross compile 초기화 하기  (0) 2010.05.18
cmake - cross make  (0) 2010.04.06
makefile 에서 컴파일할 목록 생성하기  (0) 2010.04.03
makefile 정렬하기  (2) 2010.03.31
make, gmake  (0) 2010.03.02
개발환경 자동화 - autoconf, automake, libtool  (0) 2010.03.02
Posted by 구차니

댓글을 달아 주세요

make를 이용하여 컴파일할 소스들의 목록을 작성할때

# cat Makefile
OBJS-$(CONFIG_AAC_DEMUXER)               += raw.o id3v1.o id3v2.o
OBJS-$(CONFIG_AC3_DEMUXER)               += raw.o
OBJS-$(CONFIG_AC3_MUXER)                 += raw.o

위와 같이 OBJS에 += 로 계속 더해나가다 보면
raw.o 가 여러개 붙어지고, 이 상태로 컴파일을 하면 symbol들이 중복되어

Function funcname() is deprecated in path/filename.ext on line 00

이런식으로 에러를 발생한다.
이를 간편하게 해결하기 위해서는 sort를 이용하면 된다.
sort는 중복된 내용을 제거해주는 역활도 한다.

$(sort list)
    Sorts the words of list in lexical order, removing duplicate words.
    The output is a list of words separated by single spaces. Thus,

              $(sort foo bar lose)
        

    returns the value `bar foo lose'.

    Incidentally, since sort removes duplicate words,
    you can use it for this purpose even if you don't care about the sort order.

[링크 : http://www.gnu.org/software/make/manual/make.html#Text-Functions]
[링크 : http://korea.gnu.org/manual/4check/make-3.77/ko/make_8.html#SEC76]

'프로그램 사용 > make, configure' 카테고리의 다른 글

cmake - cross make  (0) 2010.04.06
makefile 에서 컴파일할 목록 생성하기  (0) 2010.04.03
makefile 정렬하기  (2) 2010.03.31
make, gmake  (0) 2010.03.02
개발환경 자동화 - autoconf, automake, libtool  (0) 2010.03.02
make를 더욱 빠르게 하기!  (0) 2010.02.26
Posted by 구차니

댓글을 달아 주세요

  1. 험 새로 만드셨군요. 근데 주소가 외우기 편하네요. 기억에도 잘 남구요 ㅋ

    2010.03.31 10:27 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 닉네임과 블로그 주소를 꽤나 고심했답니다 ㅋ
      원래는 dangling pointer에서 dangling.tistory.com 하려니 제가 치기도 귀찮아서 말이죠 ㅋㅋ

      2010.03.31 10:39 신고 [ ADDR : EDIT/ DEL ]