shell에서 설정한 환경변수를 C구문으로 가져올수 있을까요?

jx2h의 이미지

예를들어
$export HEADER_PATH=/usr/local/myprg/include
이렇게 해놓고 C구문에서
#include "$HEADER_PATH/my_header.h"
이런식으로 사용하려면 C구문에서 어떻게 하면 좋을까요?

jenix의 이미지

(수정)

음 -.- 제가 생각한대로는 해보니까 안되네요.

컴파일 스크립트를 하나 만들어서..

bash 스크립트에서 환경변수를 읽어오고

sed 등으로..

#include "___PATH___/myinclude.h"

이런식에서.. ___PATH___ 을 정규표현식으로 치환해주는 방법은 확실히 될테구요.

흐흐;; 고수님들이 더 좋은 답변을 ^^;

---------------------------------------------------------------------------
http://jinhyung.org -- 방문해 보세요!! Jenix 의 블로그입니다! :D

simpid의 이미지

환경 변수를 읽어나 쓰기위해선
setenv(), getenv()를 사용하시면 됩니다.

Windows, Unix, Linux 같은방법 사용합니다.

수정합니다.
확인해 보니까.. 질문을 제가 끝까지 못읽었군요.
setenv, getenv는 환경변수는 읽을 수 있어도 include 문에 대입할 수 없습니다.
죄송합니다.

jx2h의 이미지

제 생각엔 인클루드에 넣으려면 아무래도 Makefile을 만들어서

Makefile에서 환경변수를 읽어오는게 가장 간단할듯 싶은데요...

GNU make에 그런기능이 있는지 모르겠네요

configure를 만들수도 없는 상황이라서...

dead or alive(0 or 1)

Hyun의 이미지

jx2h wrote:
제 생각엔 인클루드에 넣으려면 아무래도 Makefile을 만들어서

Makefile에서 환경변수를 읽어오는게 가장 간단할듯 싶은데요...

GNU make에 그런기능이 있는지 모르겠네요

configure를 만들수도 없는 상황이라서...


이 방법이... 가장 쉬울 듯 합시다.
.c.o:
        $(CC) -I$(INCLUDE_PATH) -c -o $@ $<
일케 하심이...

나도 세벌식을 씁니다
pynoos의 이미지

include 경로는 컴파일러, 정확히는 전처리기의 몫입니다.
C 명세에서는 코드내에 환경변수나 pragma 등을 이용하여 전처리기에 전달하는 것이 없으므로, -I 옵션을 사용하여 디렉토리를 추가로 지정해주는 것이 가장 널리 쓰이는 방법입니다.

따라서 Makefile 의 -I 뒤를 어떻게 만들어 줄것인지, configure 를 통해서 각 환경에 맞게 설정하는 방법이 좋습니다.

feelpassion의 이미지

#include <stdio.h>
                                                                                
int main(int argc, char **argv, char **envp)
{
        int i=0;
        while( *(envp+i)!=NULL){
                printf("env[%d]= %s\n",i, *(envp+i));
                i++;
        }
        return 0;
}

환경 변수를 가져올 수는 있습니다...

나머진 pynoos 님 말씀대로^^;;

남으로 창을 내겠소.
밭이 한참갈이 괭이로 파고 호미론 김을 메지요.
구름이 꼬인다 갈리있소. 새들의 노래는 공으로 들으랴오.
강냉이가 익거든 와자셔도 좋소.
왜 사냐건 웃지요.

feelpassion의 이미지

바로 밑 강좌,잣료실에 똑같은 기능을 하는 코드가 있군요...-.-;;;;;;;;;;;;

남으로 창을 내겠소.
밭이 한참갈이 괭이로 파고 호미론 김을 메지요.
구름이 꼬인다 갈리있소. 새들의 노래는 공으로 들으랴오.
강냉이가 익거든 와자셔도 좋소.
왜 사냐건 웃지요.

litdream의 이미지

#include 의 디렉토리만 설정해야한다면, 굳이 getenv() 가 필요할것 같지는 않습니다.
Makefile 에 -I 만 설정해주면, 알아서 될것같은데요.

삽질의 대마왕...

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.