나는 보이는 메이크있어 같은 :정의 변수는
gator: LIB=-lm
gatorgpu : GPU=-DG
....
STATIC=
ifdef STATIC
$(info CPU static)
endif
하지만 내가하고 싶은 뭔가 같은 : 누군가 유형 $make gatorgpu STATIC=1
또는 $make gator STATIC=1
다음 그래서
gator: LIB=-lm
gatorgpu : GPU=-DG
....
STATIC=
ifdef STATIC
ifdef GPU
$(info GPU static)
else
$(info CPU static)
endif
endif
대상 (이 경우 CPU 또는 GPU)에 따라 정적 라이브러리로 컴파일됩니다. 불행히도 STATIC
이 읽히지 만 GPU
변수가 없기 때문에 항상 CPU static
이됩니다. 그것을하는 우아한 방법 있는가? 당신의 설명에서
누락 된 것은 목표 별 변수가 효과가 있다는 것입니다. 그러므로'ifdef'와 같은 전역 범위에서'GPU'를 테스트하는 것은 작동하지 않을 것입니다. 왜냐하면 나중에 make가'gatorgpu' 타겟을 빌드하기 전까지 정의되지 않았기 때문입니다. – MadScientist
@MadScientist이 문제를 해결하기 위해 타겟 관련 변수를 사용할 수 없습니다. 하지만 대신 내가 무엇을 할 수 있을까? 타겟에 따라 변수를 정의하려면 어떻게해야합니까? – Manolete
글쎄, 귀하의 질문은 우리에게 효과적으로 당신에게 효과적으로 조언 하기엔 너무 추상적입니다. makefile의 축소 버전을 만드는 것이 좋지만 모든 컨텍스트가 손실 될 때까지 잘라내지 않도록 조심해야합니다. 아마도 GPU 유형에 따라'$ (info ...)'를 실행하는 것 외에도 _something_을하고 싶을 것입니다. 뭔가가 무엇인지에 대해 더 많이 알지 못한다면 우리는 최선의 방법으로 조언을 해 줄 수는 없습니다. 뭔가 일할 때까지 해결책을 추측하는 것 이외에는 말이죠. 건배! – MadScientist