1

저는 이것이 좋은지 아닌지 잘 모릅니다. 그러나 전 컴퓨터에 YOUR_NAME과 같은 환경 변수가있는 어딘가에서 일하는 것이 었습니다. 그렇다면 자신에게만 관심이있는 디버그 코드가 있다면 #if defined(YOUR_NAME)에 랩핑 할 수 있고 #if defined(YOUR_NAME) || defined(THEIR_NAME)으로 변경하지 않는 한 다른 사람을 위해 컴파일되지 않습니다.컴파일 할 때 환경 변수가 존재하는지 어떻게 알 수 있습니까?

방금이 작업을 직접 시도했지만 작동하지 않는 것으로 보입니다. Visual Studio를 다시 시작한 다음 컴퓨터를 다시 시작했지만 여전히 픽업되지 않은 것 같습니다. 이해할 수있는 것보다 더 많은 해킹이 있었습니까? 아니면 Visual Studio에서 특정 버전/옵션을 선택해야합니까?

+0

아우, noooooooooo! –

+0

@Neil 이유는 무엇입니까? 내가 말했듯이, 특히해야 할 일이 좋았는지, 아니면 다시 사용하고 싶었는지, 특히 복잡하다는 것을 기억하지 못했는지는 알지 못했습니다. – identitycrisisuk

+5

다른 사람들에게 다르게 컴파일되는 코드는 무엇입니까? 괜찮습니다! –

답변

5

건물 무엇에 IanH 세트, 비주얼 스튜디오 withing에에서,

  • 바로 프로젝트 탐색기 패널에서 프로젝트 이름을 클릭합니다.
  • 속성 페이지
  • 열기 구성 속성, C/C++, 처리기를 선택합니다 (즉, VS2008 위치이지만 VS2005에서 유사해야한다) 처리기 정의에 대한
  • WIN32이 있어야한다; _DEBUG 및 prehaps 다른 사람. 의 EVAR의 [email protected] 형식의 공간이있다
+0

이것은 원하는 효과에 가장 가깝게 보입니다. 설정을 잘못 기억 했어야합니다. 전처리 기 def에 $ (YOUR_NAME)을 넣으면 문제가없는 것 같습니까? 즉, 컴퓨터에 고유 한 동작이있는 릴리스 버전이 없기 때문에 디버그 빌드에 추가하여 다른 사람이 관심이없는 추가 디버그 출력을 정리하는 데 주로 사용됩니다. – identitycrisisuk

+0

그냥 추가 $ (Your_name)은'#define James_Curran'을 말하고 싶습니다. –

+0

예, 원하는 효과였습니다. 처음의 질문은 제가 잘못 설명하고있는 것처럼 잘 묘사되지 않았다고 생각합니다. – identitycrisisuk

0

수 없습니다. C 전 처리기 정의는 환경 변수와 전혀 관련이 없습니다. 각 사용자가 자신의 프로젝트 파일을 가지고 있어야하며 각 사용자는 프로젝트 파일 자체에 추가 define 지시문을 추가해야합니다.이 지시문은/D 스위치로 cl.exe으로 전달됩니다.

+1

3 년 전의 답변에 대해 downvote를 얻었을 때 나는 그것을 매우 좋아합니다. 5 동일한 질문에서 받아 들였다. 굉장해. –

0

방금 ​​테스트 한 결과 VC++ 2005는 환경 변수를 전처리 기의 기호로 자동 변환하지 않습니다 (두 가지 완전히 다른 것들입니다).

그래서 각 사용자가 기호를 정의하도록 일부 설정을 변경해야합니다.

1

편집 : 현재 Eclipse/Linux에서 작업 중이므로 테스트 할 수 없기 때문에 답변을 시도하지 않았지만 작동해야한다고 생각합니다. (리눅스/이클립스가 잘 동작한다.)


환경 변수를 컴파일러 호출 (또는 빌드 스크립트/Makefile)에/D % YOUR_NAME % 스위치로 전달해야합니다.

% YOUR_NAME %이 (가) 정의되지 않은 경우 문제가 발생하지 않도록하려면 앞에 다른 문자열을 추가 할 수 있습니다 (예 :

/D NAME_%YOUR_NAME% 

그럼 당신은

#if defined(NAME_identitycrisisuk) 

또는 어떤 사용자 이름은 사용할 수 있습니다.

+0

makefile에서! if를 사용하여 환경 변수를 테스트하는 것도 일반적입니다. –

2

오히려 무서운 개념을 [email protected] 형식 = "$ ([email protected] 형식)"매우 화가 얻을

  • 주,하지만 당신이 정말로 원하는 경우는 마지막에 를 추가 이렇게하려면 Visual Studio 프로젝트 설정에서 preprocesor 정의를 지정할 수 있습니다 : YOUR_NAME=$(USERNAME) Windows 시스템에 정의 된 %USERNAME% 환경 변수가 있기 때문입니다.명령 줄에서 (또는 해당 문제에 대한 Makefile 내에서) 이것을 사용하고자한다면 cl.exe의 인수로 /DYOUR_NAME=%USER_NAME%을 지정할 수 있습니다.

    추신 : 설명하신 내용이 가능하지만이 사례를 다시 생각해 볼 수 있습니다. 특정 시나리오에서만 특정 기능을 사용하려면 레지스트리 값, 구성 파일 및 합리적으로 알 수있는 다른 플래그와 같은 특정 기능을 사용하거나 사용하지 않도록 설정하는 다른 스위치를 사용하는 것이 좋습니다. 이렇게하면 동일한 바이너리가 모든 동료가 테스트 할 수있는 가능성이 유지됩니다. 이것은 실제로 다소 일반적인 관행이며 때로는 continuous integration 인 환경에서 사용되기 때문에 조기에 통합 할 수 있고 다른 사람들이 기능을 끝내거나 수정하기를 기다리지 않아도됩니다. 이 조건 스위치는 기능이 멀리 떨어져 있어도 제품의 나머지 부분과 잘 어울리는 것처럼 보이면 제거됩니다.

  • +0

    과 같은 소스 레벨 솔루션을 사용하면 실제로 다른 사람을 위해 작성하지 못하는 코드를 커밋 할 수 있습니다. 예를 들어, #ifdef COLLEGUE_NAME ... int something = ... 사람이 알 수 있도록 어려운 방법 : d –

    관련 문제