http://stackoverflow.com/questions/23180650/how-to-solve-error-missing-secret-key-base-for-production-environment-rai 내용을 참조하여 작성한 글입니다.


1. 터미널에 다음 명령어를 치면 'cb4c969b453...' 와 같은 키 값이 생성된다. 이를 복사 해 두자.

$ RAILS_ENV=production rake secret


2. 다음 명령어로 /etc/profile 파일을 수정한다. (루트 권한으로 진행)

$ sudo vi /etc/profile


편집기가 열리면 제일 아랫 줄에 다음 내용을 추가한다.

export SECRET_KEY_BASE=(아까 복사해둔 키 값)


3. 일반 유저(루트 유저가 아닌)로 접속 후


$ vi ~/.bash_profile

$ vi ~/.bash_login

$ vi ~/.profile

위 세 파일 중 하나에 아까와 같이 제일 아랫 줄에 다음 내용을 추가한다.

export SECRET_KEY_BASE=(아까 복사해둔 키 값)


4. 다음 명령어들로 환경변수 설정이 되었는지 확인 가능하다. (둘 중에 아무 명령어나 써도 된다) 

$ printenv | grep SECRET_KEY_BASE

$ echo $SECRET_KEY_BASE


제대로 설정되었다면 아까 복사해둔 키 값이 출력된다. 


분명 배포 과정을 다 마무리 했는데도 해당 IP주소로 접속 할 수 없는 경우가 있다.

AWS EC2 인스턴스의 시큐리티 그룹 설정이 잘못 되었을 경우도 있지만(외부 접속 포트 제한) 

이 글에서는 서버가 실행되고 있는지 확인 후 재시작 하는 과정에 대해 알아보자.


만약 정상적으로 nignx 서버가 돌아가고 있다면

$ ps auxw | grep nginx

를 터미널에 입력했을 때 아래와 같이 총 3개의 프로세스가 잡혀야된다.




잡히지 않았다면 다음 명령어로 nginx를 재시작 해보자

$ sudo /opt/nginx/sbin/nginx



-참고사항

앞의 포스팅을 따라 Passenger gem을 통해 Nginx를 설치했다면, 일반적인 Nginx 서버 조작 명령어가 바로 먹히지 않는다.

예를 들어, 서버를 켜는 명령어의 경우 Nginx를 직접 설치했다면 터미널에서 다음의 명령어가 수행 가능하지만

$ sudo service nginx start 


앞의 포스팅에서 설명한 방법을 따르면 위 명령어를 입력 했을 때 'command not found' 라고 뜨게 되며 실행되지 않는다. 

대신 다음 명령어가 사용 가능하다.

$ sudo /opt/nginx/sbin/nginx


비슷하게 서버를 멈출 때는 다음 명령어를 사용한다.

$ sudo /opt/nginx/sbin/nginx -s stop




사진이 뜨지 않거나, css가 적용이 안되었을 때의 원인 중 하나는 수정사항 업데이트 후 precompile을 하지 않아서이다.


터미널에서

$ rake assets:precompile


명령어로 precompile을 수행 해 본다.


직전에 올린 글과 같은 내용인데 한 눈에 전체 과정을 확인하기 위해 사진을 전부 뺐다.


==========================================================


레일즈 프로젝트를 AWS EC2 인스턴스로 배포하기 위한 과정을 정리해보았다.

AWS EC2 인스턴스에 Passenger 젬을 먼저 설치 하고 Passenger 젬을 통해서 Nginx를 설치한 후 동작시키는 과정이다.

(EC2 인스턴스는 프리티어인 아마존 리눅스 t2.micro타입을 사용했다)


로컬에서 작업한 Rails 프로젝트가 Github에 미리 올려져있다고 가정한다.



1. 아마존 AWS로 들어가서 리전(서울) 선택 후 EC2를 선택

2. 좌측메뉴에 Instance 선택

3. 제일 첫번째의 Amazon Linux AMI 2016.03.3 (HVM), SSD Volume Type 선택

4. 기본 선택되어있는 프리티어인 t2.micro를 선택 후 아래 Review and Launch 클릭

5. Edit security groups를 선택

6. Add Rule을 누르고 새로 생긴거에 Type을 HTTP를 선택. Port Ramge가 80포트인걸 확인하고 다시 아래의 Review and Launch를 눌러 돌아감.

7. Luanch 클릭. 그러면 키페어 선택창이 뜸

8. create new key pair 선택 후 key이름 설정해줌. 나는 key_cherry 이렇게 했음. 그 후 Download key pair로 .pem파일을 받음.

9. Launch instance 누르고 나서 View instance도 눌러줌. 그럼 처음 Instance 눌렀던 화면이 뜸. 

10. 이름이 없으니 name도 지어주자. cherry_election으로 했음. 인스턴스를 구분하기 위한 이름으로 없어도 상관은 없음.

초기화하는데 시간이 걸림. 끝나면 Instance state와 Status Check가 running / 2/2 checks passed 라고 됨. 서버에 접속하기 위해 Public IP를 확인 해 둘 것.


(맥의 경우)

11. terminal 에서 키파일 권한바꿔주고

$ chmod 400 Downloads/key_cherry.pem

그 다음 다음으로 접속

$ ssh -i Downloads/key_cherry.pem ec2-user@52.78.109.126

(아까 키파일 경로 지정해주고, 52.78.109.126는 ec2 instance의 Public IP. 각자의 public ip를 대신 쓰면 된다.)


(윈도우의 경우)

11-1. terminal대신 putty를 이용하여 원격 접속할껀데 .pem파일을 이용해 .ppk파일을 생성해 줄 필요가 있음.

http://trend21c.tistory.com/1295 참고


11-2. ec2-user 아이디로 접속 됨

12. 옵셔널이긴 한데, sudo yum update 으로 업뎃. y/n/D 나오면 y 누르고 엔터

13. $ sudo yum search git

14. $ sudo yum install git-all.noarch

15. $ git clone https://github.com/seobew/cherry_election.git

(git clone + 앞서 깃에서 작업한거에서 주소(깃에서 Clone or download 누르면 나오는 주소))

16. rvm 설치 (https://rvm.io/ 에서 가져온 명령어)

$ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

16-1. 마저 터미널에 치기

$ \curl -sSL https://get.rvm.io | bash -s stable

16-2. 마저 터미널에 치기

$ source ~/.profile

17. 이젠 rvm이 설치된거임. rvm은 루비온 레일즈를 깔기위한 프로그램이었음. 루비 버전 2.2.5를 설치

$ rvm install 2.2.5

18. 시간 좀 걸림. 설치가 끝나면 프로젝트 폴더로 이동해서(꼭 필요한지 잘 모르겠지만)

21. bundle install 명령어를 쓰고싶지만 지금 bundle이 설치가 안된 상황. 그래서 먼저

$ gem install bundle

로 번들부터 설치하고, 이후

$ bundle install

22. 서버를 켜주는 passenger 젬을 설치

$ gem install passenger

19. nginx를 깔기 전에 비번 셋팅하고 가자(루트권한으로 작업하기 위해)

$ sudo passwd

20-0. 관리자 권한으로 passenger를 까는게 안좋다는 얘기가 있어 다른 방법으로 깔아보기

20-2번의 $ passenger-install-nginx-module 대신 

$ rvmsudo passenger-install-nginx-module --no-rdoc --no-ri

뒤의 옵션은 없어도 무방하다. (도큐먼트, api등을 깔지 않아 조금 더 빠르다고 한다)

세부적인 설치 전 설정은 아래(20-1~20-2)와 동일하다

20-1 패스워드 변경 후, 관리자권한 접속

$ su

20-2. 이제 관리자 권한에서

$ passenger-install-nginx-module

로 하면 바로 안깔림. 몇개 해결해야될 문제들이 있음.

$ sudo yum search curl

로 찾아서

$ sudo yum install libcurl-devel.x86_64

y 로 확인해주면 설치 완료

$ sudo chmod o+x "/home/ec2-user"

방금 이것도 루트로 접속한 클라우드 서버 터미널에서 입력

다음도 입력

$ sudo dd if=/dev/zero of=/swap bs=1M count=1024

$ sudo mkswap /swap

$ sudo swapon /swap

이제 다시 설치

$ passenger-install-nginx-module

루비만 선택하고 엔터 누르다가 1,2 선택에선 1번 선택

Please specify a prefix directory[/opt/nginx]: 라는 물음엔 그냥 엔터


21. 설치완료.

22. 내용 수정을 위해 vi로 작업. sudo로 해야 수정 가능.

$ sudo vi /opt/nginx/conf/nginx.conf


22-1. 내용을 붙여넣을껀데 위치는 37번째 줄.

#gzip on;

(여기)


저 사이 (여기)에다가 다음을 복붙


server {

listen 80;

server_name example.com;

passenger_enabled on;

root /var/www/my_awesome_rails_app/public;

}


여기서 좀 수정이 필요.

example.com을 내 도메인으로(아직 도메인 없으면 상관없음)

밑에 루트 옆 경로를

        /home/ec2-user/<프로젝트 폴더명>/public;

으로 수정하고 저장 ( ex: /home/ec2-user/cherry_election/public; )


23. 이제 rake db:migrate 할껀데(배포버전의 rake 명령어는 항상 뒤에 RAILS_ENV=production를 붙여줘야 배포환경에서 적용된다. ex:migrate, drop, seed 등), 지금 젬이 덜깔려서 안될꺼임.

수정을 할 땐 여기 linux에서 하지말고 github에 수정한 코드를 올려서 pull로 내려받는 식으로 진행하는걸 권장

24. 로컬 레일즈 프로젝트에서 Gemfile에서 다음 줄을 주석 해제

gem 'therubyracer', platforms: :ruby

수정 후 bundle install

25. 그 다음 깃헙에 변경사항 올리기(c9 터미널에서 명령어 입력)

$ git status

$ git add .

$ git commit -m "gem 'therubyracer', platforms: :ruby"

$ git push origin master

26. linux에서 다시 pull (linux터미널에서)

$ git pull origin master

27. $ bundle install

28. $ rake db:migrate RAILS_ENV=production

29. $ rake secret 을 입력 후 나오는 코드를 복사해두기

30. $ cd config로 이동한 다음에 다음과 같이 입력

$ export SECRET_KEY_BASE=(여기에 아까 복붙)

이 방법이 됐어야 했는데..

안되므로 다른 방법으로 해 봄.

31. $ cd config 폴더로 이동

32. $ vi secrets.yml 로 파일 수정

33. 

production:

secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>


원래 이렇게 돼있던 자리에 <%= %> 이 구문 대신 아까 rake secret으로 생성했던 코드를 입력하기.

34. 저장 후 빠져나와서 다시 프로젝트 폴더로

35. 서버를 재시작 할껀데,

$ touch tmp/restart.txt

명령어를 쓰면 됨. 하지만 제일 처음엔 tmp디렉토리가 없다고 나오므로 만들어주기

$ mkdir tmp (처음 한번만 입력)

$ touch tmp/restart.txt (이후엔 이 명령어 만으로 재시작)

36. 이제 서버 돌아감.

http://52.78.109.126/ 으로 접속 가능.





레일즈 프로젝트를 AWS EC2 인스턴스로 배포하기 위한 과정을 정리해보았다.

AWS EC2 인스턴스에 Passenger 젬을 먼저 설치 하고 Passenger 젬을 통해서 Nginx를 설치한 후 동작시키는 과정이다.

(EC2 인스턴스는 프리티어인 아마존 리눅스 t2.micro타입을 사용했다)


로컬에서 작업한 Rails 프로젝트가 Github에 미리 올려져있다고 가정한다.



1. 아마존 AWS로 들어가서 리전(서울) 선택 후 EC2를 선택




2. 좌측메뉴에 Instance 선택




3. 제일 첫번째의 Amazon Linux AMI 2016.03.3 (HVM), SSD Volume Type 선택




4. 기본 선택되어있는 프리티어인 t2.micro를 선택 후 아래 Review and Launch 클릭




5. Edit security groups를 선택






6. Add Rule을 누르고 새로 생긴거에 Type을 HTTP를 선택. Port Ramge가 80포트인걸 확인하고 다시 아래의 Review and Launch를 눌러 돌아감.





7. Luanch 클릭. 그러면 키페어 선택창이 뜸






8. create new key pair 선택 후 key이름 설정해줌. 나는 key_cherry 이렇게 했음. 그 후 Download key pair로 .pem파일을 받음.





9. Launch instance 누르고 나서 View instance도 눌러줌. 그럼 처음 Instance 눌렀던 화면이 뜸. 



10. 이름이 없으니 name도 지어주자. cherry_election으로 했음. 인스턴스를 구분하기 위한 이름으로 없어도 상관은 없음.

초기화하는데 시간이 걸림. 끝나면 Instance state와 Status Check가 running / 2/2 checks passed 라고 됨. 서버에 접속하기 위해 Public IP를 확인 해 둘 것.



(맥의 경우)

11. terminal 에서 키파일 권한바꿔주고

$ chmod 400 Downloads/key_cherry.pem

그 다음 다음으로 접속

$ ssh -i Downloads/key_cherry.pem ec2-user@52.78.109.126

(아까 키파일 경로 지정해주고, 52.78.109.126는 ec2 instance의 Public IP. 각자의 public ip를 대신 쓰면 된다.)


(윈도우의 경우)

11-1. terminal대신 putty를 이용하여 원격 접속할껀데 .pem파일을 이용해 .ppk파일을 생성해 줄 필요가 있음.

http://trend21c.tistory.com/1295 참고


11-2. ec2-user 아이디로 접속 됨





12. 옵셔널이긴 한데, sudo yum update 으로 업뎃. y/n/D 나오면 y 누르고 엔터



13. $ sudo yum search git

14. $ sudo yum install git-all.noarch



15. $ git clone https://github.com/seobew/cherry_election.git

(git clone + 앞서 깃에서 작업한거에서 주소(깃에서 Clone or download 누르면 나오는 주소))



16. rvm 설치 (https://rvm.io/ 에서 가져온 명령어)

$ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3


16-1. 마저 터미널에 치기

$ \curl -sSL https://get.rvm.io | bash -s stable


16-2. 마저 터미널에 치기

$ source ~/.profile



17. 이젠 rvm이 설치된거임. rvm은 루비온 레일즈를 깔기위한 프로그램이었음. 루비 버전 2.2.5를 설치

$ rvm install 2.2.5




18. 시간 좀 걸림. 설치가 끝나면 프로젝트 폴더로 이동해서(꼭 필요한지 잘 모르겠지만)


21. bundle install 명령어를 쓰고싶지만 지금 bundle이 설치가 안된 상황. 그래서 먼저

$ gem install bundle

로 번들부터 설치하고, 이후

$ bundle install



22. 서버를 켜주는 passenger 젬을 설치

$ gem install passenger



19. nginx를 깔기 전에 비번 셋팅하고 가자(루트권한으로 작업하기 위해)

$ sudo passwd



20-0. 관리자 권한으로 passenger를 까는게 안좋다는 얘기가 있어 다른 방법으로 깔아보기

20-2번의 $ passenger-install-nginx-module 대신 

$ rvmsudo passenger-install-nginx-module --no-rdoc --no-ri

뒤의 옵션은 없어도 무방하다. (도큐먼트, api등을 깔지 않아 조금 더 빠르다고 한다)

세부적인 설치 전 설정은 아래(20-1~20-2)와 동일하다

20-1 패스워드 변경 후, 관리자권한 접속

$ su









20-2. 이제 관리자 권한에서

$ passenger-install-nginx-module

로 하면 바로 안깔림. 몇개 해결해야될 문제들이 있음.

$ sudo yum search curl

로 찾아서

$ sudo yum install libcurl-devel.x86_64

y 로 확인해주면 설치 완료

$ sudo chmod o+x "/home/ec2-user"

방금 이것도 루트로 접속한 클라우드 서버 터미널에서 입력

다음도 입력

$ sudo dd if=/dev/zero of=/swap bs=1M count=1024

$ sudo mkswap /swap

$ sudo swapon /swap

이제 다시 설치

$ passenger-install-nginx-module

루비만 선택하고 엔터 누르다가 1,2 선택에선 1번 선택

Please specify a prefix directory[/opt/nginx]: 라는 물음엔 그냥 엔터



21. 설치완료.






22. 내용 수정을 위해 vi로 작업. sudo로 해야 수정 가능.

$ sudo vi /opt/nginx/conf/nginx.conf

(vi에서 line number를 확인하기 위해 :set nu 명령어 입력했음)


22-1. 내용을 붙여넣을껀데 위치는 37번째 줄.

#gzip on;

(여기)


저 사이 (여기)에다가 다음을 복붙


server {

listen 80;

server_name example.com;

passenger_enabled on;

root /var/www/my_awesome_rails_app/public;

}


여기서 좀 수정이 필요.

example.com을 내 도메인으로(아직 도메인 없으면 상관없음)

밑에 루트 옆 경로를

   /home/ec2-user/<프로젝트 폴더명>/public;

으로 수정하고 저장 ( ex: /home/ec2-user/cherry_election/public; )


23. 이제 rake db:migrate 할껀데(배포버전의 rake 명령어는 항상 뒤에 RAILS_ENV=production를 붙여줘야 배포환경에서 적용된다. ex:migrate, drop, seed 등), 지금 젬이 덜깔려서 안될꺼임.

수정을 할 땐 여기 linux에서 하지말고 github에 수정한 코드를 올려서 pull로 내려받는 식으로 진행하는걸 권장


24. 로컬 레일즈 프로젝트에서 Gemfile에서 다음 줄을 주석 해제

gem 'therubyracer', platforms: :ruby

수정 후 bundle install


25. 그 다음 깃헙에 변경사항 올리기(c9 터미널에서 명령어 입력)

$ git status

$ git add .

$ git commit -m "gem 'therubyracer', platforms: :ruby"

$ git push origin master


26. linux에서 다시 pull (linux터미널에서)

$ git pull origin master


27. $ bundle install


28. $ rake db:migrate RAILS_ENV=production


29. $ rake secret 을 입력 후 나오는 코드를 복사해두기


30. $ cd config로 이동한 다음에 다음과 같이 입력

$ export SECRET_KEY_BASE=(여기에 아까 복붙)

이 방법이 됐어야 했는데..

안되므로 다른 방법으로 해 봄.


31. $ cd config 폴더로 이동


32. $ vi secrets.yml 로 파일 수정


33. 

production:

secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>


원래 이렇게 돼있던 자리에 <%= %> 이 구문 대신 아까 rake secret으로 생성했던 코드를 입력하기.


34. 저장 후 빠져나와서 다시 프로젝트 폴더로


35. 서버를 재시작 할껀데,

$ touch tmp/restart.txt

명령어를 쓰면 됨. 하지만 제일 처음엔 tmp디렉토리가 없다고 나오므로 만들어주기

$ mkdir tmp (처음 한번만 입력)

$ touch tmp/restart.txt (이후엔 이 명령어 만으로 재시작)


36. 이제 서버 돌아감.

http://52.78.109.126/ 으로 접속 가능.









c++을 복습하다가 int도 4byte, long int도 4byte의 크기를 가지는 것에 의문을 품어 찾아보았다. (short int는 2바이트)


C++ 표준안은 정수 타입의 크기를 정확하게 명시하고 있지 않다. 다만 다음과 같은 최소한의 규정을 가고 있을 뿐이다.

1. short int의 크기는 적어도 2바이트보다 커야 한다.

2. int의 크기는 적어도 short int의 크기보다 커야 한다.

3. long int의 크기는 적어도 4바이트보다 커야 하고 int의 크기보다 커야 한다.


정작 기준이 되는 int의 경우 규정이 애매한데, int는 시스템의 자연스러운 크기를 따르도록 규정하고 있다.

자연스러운 크기란 시스템에서 한번에 처리할 수 있는 크기를 말하는데, 일반적인 윈도우즈 환경에서는 4byte(32bit)가 자연스러운 크기다.

(64비트 운영체제에서도 int의 크기는 4byte이다. long의 경우 32비트 운영체제에서는 4byte(32bit), 64비트 운영체제에서는 8byte(64bit)인데, 윈도우즈 64비트 운영체제에서는 long도 4byte이다.)


출처 : 뇌를 자극하는 C++ 프로그래밍. 이현창 저. 한빛미디어


'짧은 팁' 카테고리의 다른 글

[AWS] Your service sign-up is almost complete! 해결하기  (4) 2016.11.29
vi 명령어 정리  (0) 2016.11.27
포인터 헷갈릴 때(c, c++)  (0) 2016.10.02
Makefile 만들기  (0) 2016.09.30

아마존 웹 서비스(Amazon Web Services)를 이용하기 위해 회원가입을 다 마치고 유료 서비스(ex: EC2)를 이용하려고 하면 아래와 같은 메세지만 나오고 아무리 기다려도 서비스 대시보드창으로 진행되지 않는 경우가 있다.


Your service sign-up is almost complete!

Thanks for signing up with Amazon Web Services. Your services may take up to 24 hours to fully activate. If you’re unable to access AWS services after that time, here are a few things you can do to expedite the process:


Make sure you provided all necessary information during signup. Complete your AWS registration.

Check your email to see if you have received any requests for additional information. If you have, please respond to those emails with the information requested.

Verify your credit card information is correct. Also, check your credit card activity to see if there’s a $1 authorization (this is not a charge). You may need to contact your card issuer to approve the authorization.

If the problem persists, please contact Support:



몇 가지 가능성이 있겠지만, 

방금 개인적으로 겪었던 문제는 결론부터 말하자면 카드 입력 정보가 잘못된 것이었는데, 카드 정보가 잘못 됐었음에도 테스트 결제($1) 문자가 날라와서 그게 문제인지 전혀 몰랐었다.


아래 사진을 보면, 11/10일 날짜에 1건이 결제되었고(카드 정보 잘못 됐었었음), 11/28일에 2건이 결제되었다(카드 정보 수정)

나만 그런지는 모르겠지만, 항상 정상 처리 될 때는 2건이 연속 결제(실제론 결제되지 않음)되었다.




해결한 방법은 다음과 같다. 최상단 메뉴에서 아이디(이름)을 누르면 나오는 메뉴 중 My Account - Payment Methods(결제 방법)으로 들어가서 아래 사진과 같이 수정한다.


나는 처음에 영어 이름 자리에 영문 이름(본인 카드에 적혀있는)이 아닌 아이디를 썼었고, 이를 수정하니 위처럼 결제 문자 2건이 날라오더니 문제가 해결되었다.

'짧은 팁' 카테고리의 다른 글

[c,c++] int와 long int의 차이  (0) 2017.03.25
vi 명령어 정리  (0) 2016.11.27
포인터 헷갈릴 때(c, c++)  (0) 2016.10.02
Makefile 만들기  (0) 2016.09.30

필요한 것만 틈틈히 업데이트 할 예정


찾기 (선택된 상태에서 다음 찾기 n, 이전 찾기 N)

:/ 위에서 아래로

:? 아래에서 위로


vi상에서 명령어 실행

:! <명령어>  vi를 종료하지 않고 linux 명령어 실행하기 (ex: :! ls)


다중 파일 작업

:vs filename : 파일을 좌우 분할하여 열기

:sp filename:  파일을 위 아래 분할하여 열기

shift + w (+w?): 열어둔 문서끼리 이동

:wqa : 열어둔 창 모두 저장 후 종료

'짧은 팁' 카테고리의 다른 글

[c,c++] int와 long int의 차이  (0) 2017.03.25
[AWS] Your service sign-up is almost complete! 해결하기  (4) 2016.11.29
포인터 헷갈릴 때(c, c++)  (0) 2016.10.02
Makefile 만들기  (0) 2016.09.30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// written by hyeongmin
#include <iostream>
using namespace std;
 
int main() {
    int num = 10;        // num : int 타입, 담고있는 값 : 10.
    int* numPtr = &num;    // numPtr : int* 타입(인트 포인터 타입), 담고있는 값 : &num = num의 주소(16진수)
 
                        // & 연산자 : 뒤에 오는 변수의 주소(16진수)를 반환
                        // * 연산자 : 뒤에 오는 포인터변수가 담고있는 값을 반환
 
    cout << "num : " << num << endl
         << "&num : " << &num << endl
         << "numPtr : " << numPtr << endl
         << "*numPtr : " << *numPtr << endl;
 
    return 0;
}
 
cs



실행 결과



'짧은 팁' 카테고리의 다른 글

[c,c++] int와 long int의 차이  (0) 2017.03.25
[AWS] Your service sign-up is almost complete! 해결하기  (4) 2016.11.29
vi 명령어 정리  (0) 2016.11.27
Makefile 만들기  (0) 2016.09.30

리눅스에서 현재 폴더 안에 확장자 없는 Makefile을 만들고 안에 실행할 명령문들을 기술하면 쉘에서 make 명령어 입력 시 기술한 명령어들이 실행된다.


예를 들어, Makefile을 다음 내용을 담아 저장을 한다(쉘 명령어줄 들여쓰기 유의)


1
2
3
4
5
6
main: main.cpp header.h
    g++ main.cpp header.h -o main
run:
    main
clean:
    rm -rf main
cs


그 후, 쉘에서 "make" 또는 "make main" 명령을 입력하면, ("make"로만 입력하면 제일 처음 기술한 명령어가 실행된다)

main: 오른쪽에 나열된 파일들이 존재하는지 확인한 후(종속성 검사) 이상이 없다면 다음 줄의 명령("g++ main.cpp header.h -o main")을 수행한다


마찬가지로, rm -rf main 명령어를 호출하고 싶을 땐 "make clean"을 입력하면 된다.


이 외에 매크로나 변수를 지정해서 동어반복을 줄이는 방법도 있다.

'짧은 팁' 카테고리의 다른 글

[c,c++] int와 long int의 차이  (0) 2017.03.25
[AWS] Your service sign-up is almost complete! 해결하기  (4) 2016.11.29
vi 명령어 정리  (0) 2016.11.27
포인터 헷갈릴 때(c, c++)  (0) 2016.10.02

+ Recent posts