네, 두 가지 옵션이 있습니다. 폴더 구조가 이와 비슷한 것으로 가정합시다.
├── autopilot
│ ├── _AutoPilot.cpp
│ ├── _AutoPilot.h
│ └── action
│ ├── ActionBase.cpp
│ ├── ActionBase.h
│ ├── APcopter
│ │ ├── APcopter_avoid.cpp
│ │ ├── APcopter_avoid.h
당신이 CMakeLists.txt에게 하위 디렉토리의 각 하나를 추가해야 AUX_SOURCE_DIRECTORY
를 사용하는 경우. 그런 다음 모든 하위 디렉토리를 포함하고 링크해야합니다. 이것은 상당히 어려운 작업입니다. 그래서 당신은 GLOB 할 수 있고 일을 아주 쉽게 할 수 있습니다. 이것이 어떻게 이루어 졌는지입니다.
:
ADD_LIBRARY (autopilot ${autopilot})
TARGET_LINK_LIBRARIES (autopilot)
이 소스 코드 위에 사용하여 실행 파일을 만들려면 명령입니다 : 당신이 소스 코드 위에 사용하여 라이브러리를 만들려면
file(GLOB autopilot_sources ./*.cpp ./*/*.cpp ./*/*/*.cpp ./*/*/*/*.cpp ./*.c ./*/*.c ./*/*/*.c ./*/*/*/*.c)
SET(autopilot ${autopilot_sources})
이 명령입니다
ADD_EXECUTABLE(autopilot ${autopilot})
"glob로 모든 소스 파일 수집"은 ** CMake에서 권장하지 않음 ** : 소스 트리에서 소스 파일 목록을 수집하는 데'GLOB '을 사용하지 않는 것이 좋습니다. 소스가 추가되거나 제거 될 때'CMakeLists.txt' 파일이 변경되지 않으면 생성 된 빌드 시스템은 언제 CMake가 재생성을 요청할 지 알 수 없습니다. * - [documentation] (https://cmake.org/cmake/help/) v3.7/command/file.html) –
@FranklinYu에는 수동으로 모든 파일 이름을 쓰지 않아도되는 대안이 있습니까? –
@Ciro 모든 파일 이름을 쓰는 것을 피하려면 OP에서 언급 한 'foreach'가 최선의 방법이라고 생각합니다. 그러나 CMake 팀은 수동으로 모든 파일 이름을 쓰는 것을 권장합니다 *. –