문제

1) 우리는 Z/OS USS 및 Linux 플랫폼 모두에서 C ++를 구축 할 필요가 있습니다. makefiles를 일반화하기 위해 Z/OS USS에서 GNU Make를 사용하는 것이 좋습니다.

2) makefiles가 일반적이라면 Makefiles의 일부 단계는 여전히 플랫폼에 대한 조건부입니다. 조건부 편집과 유사한 단계별로 그렇게 할 수 있습니까? 그렇다면 구문에 대한 도움을받을 수 있습니까?

3) 우리의 Z/OS USS MakeFiles에는 아래의 예에서와 같이 쉘 스크립트 또는 명령 그룹이 있으며, 정사각형 브래킷 []는 한 번에 한 줄이 아닌 그룹으로 쉘에 명령을 제시합니다. GNU 제조업체를 사용 하여이 명령을 수정하여 한 줄이되도록 수정해야했으며, 이는 지저분한 줄이되었으며 중첩 루프는 문제가되었습니다. Gmake를 사용하여 명령을 그룹화하는 더 쉬운 방법이 있습니까?

  [ 
  dirs=$(targets) 
  rc=0 
  for dir in $$dirs 
  do 
    cd $$dir/src 
    make -r 
    rc=$$? 
    if [ $$rc != 0 ]; then 
      echo "build failed for directory:" $$dir: 
      break; 
    fi 
    cd ../..
   done 
   echo "return code from make = " $$rc 
 ]
도움이 되었습니까?

해결책

면책 조항 :

  1. 나는 Z/OS USS에 대해 아무것도 모른다.
  2. 나는 Make에 대해 많이 알고있다 (그리고 망치를 들고있을 때 ...).

조언:

  • 예, 두 플랫폼 모두에서 Gnumake를 사용하고 가능한 한 공통적으로 유지하는 것이 좋습니다.
  • 조건부를 makefile에 넣는 몇 가지 방법이 있습니다.

    # Usually one defines a variable first.
    SYSTEM = $(shell uname)
    
    # Then one can define other variables conditionally
    
    SOMEFILE = $(SYSTEM)_file
    
    ifeq ($(SYSTEM), Linux)
    # Do some Linux things, define variables, whatever.
    else
    # Do some z/OS USS things.
    endif
    
    # In a block of commands, if the conditional DOESN'T start with a tab,
    # it's a Make statement and follows Make syntax.
    thing:
    ifeq($(SYSTEM), Linux)
        shell-command-do-something
    endif
    
    # If the conditional DOES follow a tab, Make expands the variables and passes
    # the whole thing to the shell, so the syntax is whatever the shell requires.
    otherthing:
        if($(SYSTEM)==ZOS) do_x ; otherwise do_y ; finish
    

    그리고 당신이 이것들에 지루할 때 시도해야 할 다른 고급 트릭이 있습니다.

  • 나는 당신이 그룹으로 명령을 처리하기를 원한다고 말할 때 무슨 뜻인지 잘 모르겠지만, 그룹의 각 명령에 대해 원하는 것을 얻을 수 있다고 생각합니다. 동일한 서브 쉘에 하나 (그렇지 않으면 각 명령은 자체 서브 쉘을 얻습니다).

  • 다른 팁

    휴대용 Makefiles가 필요한 경우 GNU Make를 사용하십시오. 나는 아무런 문제없이 몇 년 동안 USS에서 그것을 실행 해 왔습니다. 편안하지 않으면 직접 구축하는 것이 좋으면 AA 사본을 얻을 수 있습니다. 여기에서

    UNIX 시스템 서비스 (USS) 및 C/C ++/Hlasm을 사용하여 Z/OS에 대한 여러 응용 프로그램을 구축했습니다. 나는 그것이 있음을 알았습니다 그만한 가치가 있습니다 GMAKE를 만들기보다는 사용합니다. 예, Gmake를 다운로드하여 설정해야하지만 사용하기 쉽고 휴대용이 쉬운 방법입니다. Gmake 외에도 세게 때리다 또한. USS와 다른 플랫폼간에 휴대용 쉘 스크립트를 사용하여 자신을 사용하지 않고 강제로 사용하는 것이 더 쉬울 것입니다. . 아마도 gmake와 bash를 얻을 수있는 곳이있을 것입니다. 그러나 나는 로켓 사이트를 사용했습니다. http://www.rocketsoftware.com/product-categories/mainframe/bash-zos (지원을 원하지 않으면 무료입니다).

    라이센스 : CC-BY-SA ~와 함께 속성
    제휴하지 않습니다 StackOverflow
    scroll top