다음과 같은 문제가 있습니다.컴파일시에 생성 된 객체를 결정하십시오.
구성 요소 A가 있습니다.이 구성 요소에는 B, C, D 하위 구성 요소가 있습니다. cmake를 사용하여 B 또는 C 구성 요소가 아닌 건물을 만들고 있습니다. 현재 플랫폼 구성에 따라 다릅니다. 내 cmake 시스템은 주어진 cmake 실행에 사용 된 구성 요소 만 연결하기위한 실행 가능 메이크 파일 (A 구성 요소 용)을 만들고 있습니다. 구성 요소 B가 빌드 된 경우, 그렇지 않은 경우 실행 가능 파일에 추가됩니다. 링크되지 않습니다. 다른 것과 동일합니다 - C, D.
이러한 모든 B, C, D 구성 요소는 A 구성 요소에서 사용되는 인터페이스의 일부 구현을 제공합니다. 이 구성 요소는 B, C, D에 의해 생성 된 객체를 관리하고 적절한 시점에 적절한 객체를 사용하여 객체를지도에서 유지해야합니다.
질문 :
나는 그것이 링크와 함께 지금 동일하게 자동으로 인터페이스를 구현하는 객체를 추가하는 몇 가지 간단하고 신뢰할 수있는 메커니즘을 달성하고자하는 - 내장 된 전용 모듈입니다 링크. 이러한 객체들과 마찬가지로 - 컴파일 된 경우에만 A 컴포넌트에 등록되도록하고 싶습니다.
설명하기가 어렵습니다. 아이디어는 쉽습니다 - 컴파일 타임에 해당 오브젝트의 맵을 빌드하십시오. 컴파일 된 컴포넌트 만이 객체를이 맵에 전달해야합니다.
makefile/cmake 시스템에서 설정 한 전 처리기 지시문을 사용하여이 문제를 해결할 수 있습니다. 예를 들어, 구성 요소 B가 컴파일되고 A 컴파일시 포함되어야하는 경우 '#ifdef COMPILED_B'와 같은 지시문을 사용하여 필요할 때 A의 B에 대한 지원을 포함 할 수 있습니다. –
예, 가능하지만 소스 코드에서 #ifdef를 사용하지 않으려합니다. 나는 다른 사람들이 어떻게 좀 더 정교한 방법으로 그것을하고 있는지 알고 싶었다. – user2301299