C ++로 빌드 스크립트를 작성하는 것이 이치에 맞습니까?


15

CMake를 사용하여 프로젝트 IDE / makefile을 생성하고 있지만 여전히 컴파일 된 파일을 조작하거나 코드를 생성하려면 사용자 정의 "스크립트"를 호출해야합니다.

이전 프로젝트에서는 Python을 사용했지만 괜찮 았지만 지금은 작업중 인 두 개의 큰 프로젝트에서 많은 종속성을 관리하는 데 심각한 문제가 발생하여 모든 곳의 종속성을 최소화하고 싶습니다.

누군가 C ++을 사용하여 언어 의존성을 추가하는 대신 빌드 스크립트를 작성하도록 제안했습니다. 프로젝트 테마 자체는 이미 C ++을 사용하므로 볼 수있는 몇 가지 장점이 있습니다.

  • 전체 프로젝트를 빌드하려면 C ++ 컴파일러와 CMake 만 있으면됩니다 (다른 모든 종속성은 C 또는 C ++ 임).
  • C ++ 유형 안전 (현대 C ++ 사용시)은 "올바른"모든 것을 쉽게 얻을 수 있도록합니다.
  • 또한 내가 잘 아는 언어이기 때문에 좋은 파이썬 코드를 작성할 수 있어도 더 편해집니다.
  • 실행 속도의 잠재적 인 이득 (그러나 나는 그것이 정말로 지각 될 것이라고 생각하지 않습니다);

그러나 몇 가지 단점이있을 수 있다고 생각하며 아직 시도하지 않은 실제 영향을 확신하지 못합니다.

  • 코드를 작성하는 것이 더 길 수 있습니다 (C ++에서 빠르게 작동하는 것을 작성하기에 충분히 효율적이기 때문에 확실하지 않기 때문에이 시스템의 경우 작성하는 데 오래 걸리지 않을 것입니다) (컴파일 시간은 ' 이 경우에는 문제가되지 않습니다.)
  • 입력으로 읽을 모든 텍스트 파일이 UTF-8이라고 가정해야합니다. C ++에서 런타임에 쉽게 확인할 수 있는지 확실하지 않으며 언어는 확인하지 않습니다.
  • C ++의 라이브러리는 스크립팅 언어보다 관리하기가 어렵습니다.

경험과 통찰력이 부족하여 장점과 단점이 누락되었을 수 있습니다. 그래서 질문은 : C ++을 사용하는 것이 합리적입니까? 보고 할 경험이 있고 중요한 장점과 단점이 있습니까?


1
빌드 용 단일 언어 인터프리터에 따르면 특히 이식성이 뛰어나고 Linux에서는 광범위하고 Windows에서는 쉽게 사용할 수 있으므로 Python이기 때문에 그리 나쁘지 않습니다. 추가 Python 라이브러리가 필요한 경우 virtualenv를 사용할 수 있으며 하나의 Python 파일 (제공 가능한) 인터넷 연결과 약간의 배관을 추가하여 virtualenv를 설정하고 설치하고 실제 실행 해당 환경에서 스크립트를 작성하십시오. 빌드에서 추가 스크립트를 사용하고 요구 사항으로 인터넷 연결을 얻을 수 있습니다.

상당히 좋은 안정성으로 텍스트 인코딩을 추측 할 수 있습니다.
DeadMG

@DeadMG 그래,하지만 너무 많은 일을하면 손으로 그렇게한다 ( 좋은 추측 을 원하고 스스로를 제한하지 않으면 "이 ASCII 또는 유니 코드이고 유니 코드 인 경우 몇 비트 및 바이트 순서입니까?") 또 다른 의존성을 추가하면 (자유롭고 자유로운 라이브러리가있는 경우) Python에 따라 중지하기 위해 C ++로 넘어가는 지점을 물리칩니다.

@delnan 예. 그러나 여전히 더 많은 언어를 설치해야합니다. 설명에서 추가 종속성은 "너무 나쁘지 않은"것 같지만 이미 관리해야 할 것이 많기 때문에 사용하는 언어를 제한하는 데 도움이 될 수 있으므로 고려하고 있습니다. 또한 임베디드 스크립팅 언어 (프로젝트에서 직접 C ++로 구현), javascript / HTML / CSS, XML 및 이미 염두에 두어야 할 다른 형식을 사용합니다.
Klaim

2
C ++ 빌드 스크립트를 빌드하는 데 무엇을 사용 하시겠습니까?
jk.

답변:


24

파이썬을 사용하십시오.

C ++로 개발하고 Python에서 빌드 스크립트를 수행하며 C ++에서 스크립트를 작성하는 것이 고통 스럽습니다.

  • 파이썬은 딕셔너리,리스트,리스트의 딕셔너리 등을 조작하는 것이 쉽지 않습니다. 예를 들어, 스크립트 중 하나는 모든 툴, 툴 버전 및 툴 버전 경로의 다단계 계층 구조를 사용합니다. ) C ++은 템플릿 및 사용자 정의 클래스와 동일하게 수행 할 수 있지만 훨씬 더 장황합니다 (더 많은 코드 줄로 변환하여 일반적으로 생산성을 저하시킵니다).
  • Python은 XML 및 JSON 처리, 하위 프로세스os.walk 와 같은 고급 라이브러리 및 루틴을 제공합니다 . 다시 C ++에서이 작업을 수행 할 수 있지만 라이브러리를 찾고, API를 배우고, 호출을 올바르게 어셈블하는 등의 작업이 훨씬 더 많이 수행됩니다.
  • 빌드 스크립트는 부가 가치가없는 활동입니다 (임의의 용어를 빌리는 것). 가능한 한 높은 수준의 언어를 사용하고, 가능한 한 빨리 언어를 사용하고, 업무에 복귀하여 사용자에게 도움이되는 것이 좋습니다.
  • 내 경험상, 빌드 스크립트는 예상치 못한 방식으로 커지는 경향이 있습니다. C ++에서 작업이 처음에는 단순 해 보이지만 서두르면 복잡해질 수 있습니다. 새로운 요구 사항이 생길 때 C ++에서 수행하는 것보다 Python 스크립트에서 처리하는 것이 훨씬 간단합니다 (새로운 라이브러리 API 등을 찾거나 읽어야 할 수도 있음).

C ++에 대해 나열한 장점과 관련하여 :

  • 단일 종속성 (Python)을 추가해도 빌드가 크게 복잡해져서는 안됩니다. 예를 들어 대부분의 Linux 설치에서는 이미 표준입니다. Python의 "batteries included"라이브러리 덕분에 빌드 스크립트가 의존하는 C ++ 라이브러리보다 관리하기가 더 쉬울 수도 있습니다.
  • C ++이 제공하는 형식 안전성은 작은 스크립트가 아니라 큰 프로젝트에 가장 유용합니다.
  • 파이썬은 C ++을 매우 잘 보완하고 (높은 수준 대 낮은 수준, 동적 형식 대 정적 형식 등) 나중에 원하는 경우 C ++과 매우 잘 통합 할 수 있습니다 (SWIG 및 Boost.Python 덕분에). C ++ 프로그래머에게 배울 가치가 있습니다.
  • 당신이 말했듯이, 실행 속도는 문제가되지 않아야합니다.

우리는 크로스 paltform 프로젝트에서 cmake로 1 년 동안 투쟁 한 후이 작업을 수행했습니다 (파이썬 빌드). 결국 우리는 의존성 검사 (빌드의 가장 복잡한 부분)를 시도하지도 않았습니다. 자동화 된 빌드의 경우 어쨌든 모든 것을 다시 빌드하고 싶기 때문에 C ++에는 많은 복잡한 종속성이 있습니다
Martin Beckett

1

나는 이것이 특정 질문에 있다고 믿습니다. 빌드 스크립트에 C ++을 사용하는 것이 타당한 지 아닌지에 대한 정답이 없다고 주장합니다. 실제로 시도하는 것이 유일한 방법입니다.

개인적으로 저는 이진 파일 조작 및 코드 생성 작업을 관리하는 언어의 표현력이 향상되고 (개인적 견해) 더 쉬운 표준 라이브러리 도구로 인해 Python이 C ++보다 우수하다는 것을 알았습니다. 물론, 작업을 위해 개발 된 정교한 라이브러리가 사용 가능할 수도 있지만 그렇지 않은 경우 일반적으로 파이썬이 "보다 정확한"답변이되기를 개인적으로 확신합니다.


1

스크립트를 직접 작성하지 마십시오. 노력이 중복되고 바퀴가 다시 발명됩니다.

SCONS 또는 C ++ 빌드 시스템을 지원 하는 Maven 3 과 같은 것을 사용하십시오 .

언어에 관계없이 우수한 빌드 시스템은 작동 가능한 실행 가능한 아티팩트를 빌드하기 위해 스크립트 형식의 사용자 정의 로직을 요구하지 않아야합니다.

빌드 시스템에서 사용자 정의하기 위해 스크립트를 작성해야하는 경우 좋은 빌드 시스템이 아닙니다. 빌드 시스템 용 플러그인을 작성하는 것은 다른 이야기이지만 여전히 환경 / 하드웨어에 매우 특수해야하며 거의 사용되지 않는 것이어야합니다.


1
설명했듯이 이미 cmake를 사용하고 있지만 여전히 사용자 정의 스크립트가 필요합니다. 빌드 프로세스 자체가 아니라 해당 사용자 정의 스크립트에 대해 이야기하고 있습니다.
Klaim

1
Maven을 좋아합니다. "Hell World"C 프로그램을 빌드하는 데 필요한 스크립트가 프로그램보다 더 깁니다!
quant_dev

@quant_dev, 나는 자신의 웹 페이지에서 Maven을 처음 사용했을 때를 기억합니다. 처음 설정하기가 어려우므로 이미 maven을 알고있는 사람과 시작하는 것이 좋습니다. 그것은 내가 그것과 전혀 관련이 없다는 것을 원한 첫 징후였습니다!
Brady

SCons가 마음에 들었습니다. 조금 느리지 만 사용하기 쉽습니다.
quant_dev

1
@JarrodRoberson "스크립트"를 너무 자유롭게 사용했습니다. 구성 파일을 의미합니다. 선언적 인 것이 Maven을 자동으로보다 이식 가능하고 유지 관리하기 쉽게 만드는지 확실하지 않습니다. 유연성이 떨어지기 때문에 대규모 프로젝트에서는 어려움이 될 수 있습니다.
quant_dev

0

질문에 집중하려면 :

C ++로 빌드 스크립트를 작성하는 것이 이치에 맞습니까?

대답은 간단 없음 .

현재 허용되는 답변은 파이썬을 확대하고 유효한 관심사를 모두 나열하지만 언어 독립적 이유를 추가하고 싶습니다.

당신은 정말 하지 않는 에서 스크립트 아무것도 할 어떤 당신이 그것을 도울 수 있다면 컴파일 언어 :

  • 스크립트를 부트 스트랩하려면 스크립트가 필요합니다!
  • 또는 컴파일 된 스크립트를 소스 제어로 체크인해야합니다 (그리고 체크인 된 소스와 동기화 상태를 유지하십시오!).
  • 스크립트에는 갑자기 스크립트에 대한 빌드 구성이 첨부되어 있습니다. (그것이 유지되어야합니다!)

또한 다른 답변으로 이동하십시오.

아마도 당신 빌드 스크립트를 작성하기 위해 "원시"스크립팅 언어를 사용하고 싶지 않을 것입니다 (C ++ 복잡도는 CMake에 의해 처리 될 것입니다).

아마 당신이 해야 할 일은 Build 중 하나를 선택하는 것입니다 . 시스템 . 밖으로 . 거기에 . 청구서에 맞는지 확인하십시오. 스크립팅 가능성 / 확장 성 / CMake-nice-with-Cake / crossplatformness.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.