다른 CMake 프로젝트가이 라이브러리를 쉽게 포함 할 수 있도록 합리적인 라이브러리 구조와 CMake 파일을 만들려고합니다. 비슷한 질문을 많이 발견했지만 그 중 아무 문제가 내 정확한 문제를 해결하지 못하는 것 같습니다.CMake로 C++ 라이브러리 만들기
이/*MyLibrary/
├── CMakeLists.txt (including lib subdirectories)
├── external/
│ └── googletest/
├── lib/
│ ├── common/
│ │ ├── CMakeList.txt (creates static lib common)
│ │ ├── include/common/*.h
│ │ └── src/*.cpp
│ ├── cipher/
│ │ ├── CMakeList.txt (creates static lib cipher)
│ │ ├── include/cipher/*.h
│ │ └── src/*.cpp
└── test/
├── main.cpp (code for executing google test)
├── CMakeLists.txt (creates unittest executable)
├── common/*Test.cpp
└── cipher/*Test.cpp
*/
가 지금은 비슷한 디렉토리 구조의 프로젝트를 만들려하지만 중 하나와 동일한 이름을 가진 해당 프로젝트에 정적 라이브러리를 생성 할 때 문제가 발생합니다
내 현재의 구조는 다음과 같다 MyLibrary
(예 : common
)의 정적 라이브러리
프로젝트 CMakeLists에서 add_subdirectory(external/MyLibrary)
을 사용하여 프로젝트에 라이브러리를 포함시킬 생각 이었지만 정적 라이브러리의 이름이 콜라이드 (colide)되기 때문에 실패합니다.
라이브러리 이름을 변경하여이 문제를 해결할 때도 (실제로 우아한 솔루션이라고 생각하지는 않습니다) 라이브러리와 프로젝트가 모두 googletest에 의존하기 때문에 googletest 충돌로 끝납니다.
쉽게 해결할 수있는 방법이 있습니까? 내가 libMyLibrary.a
라고 모든 하위 라이브러리에서 하나의 정적 라이브러리를 생성하고 해당 라이브러리 (preffered 옵션을 포함 할 것 MyLibrary
에서
- 을,하지만 난 어떻게 달성하는 단서가없는 : 나는 2 posibilities의 생각 그것은
- ) CMake에서 라이브러리의 사용자를 강제로 설치하고 내가 갈 것 프로젝트 서브 모듈 (마지막 옵션으로 라이브러리)
를 해결하기 위해 다른 합리적인 방법이 있나요 포함되지 않습니다 내 라이브러리는 대부분의 CMake 프로젝트와 호환 될 수 있습니까? 그렇지 않다면 언급 된 옵션 중 적어도 하나를 어떻게 얻을 수 있습니까? 즉
:
라이브러리가 다른 CMake 프로젝트에 포함하기 쉬운, 그래서 나는 도서관에 대한 CMake 파일을 만들 수 있습니까?
googletest와 같은 중복 의존성을 어떻게 처리 할 수 있습니까?
단일 정적 라이브러리 옵션의 경우 다음과 같이 작동합니다. https://cmake.org/Wiki/CMake/Tutorials/Object_Library 가장 좋은 옵션이 아닌 것은 확실하지만 완료했습니다. 하지만 왜 googletest에 의존하는 라이브러리 두 개가 문제가되어야하는지 잘 모르겠습니다. – zzxyz
몇 차례 질문을 읽었지만 여전히 문제가 무엇인지 이해하지 못했습니다. 명확히하십시오. – RCYR
@zzxyz, 감사합니다. – ProXicT