반응형
CMake에서 여러 실행 파일 추가
C ++ 프로젝트의 내 코드는 다음과 같이 구성됩니다.
- 나는 몇이
.cpp하고.h있는 파일은 내 클래스가 포함되어 있습니다 - 파일과 일부 외부 라이브러리
.cxx에 대해 컴파일 해야하는 여러 파일이 있습니다.cpp.
이제 각 .cxx파일에는 main()메서드가 있으므로 파일과 이름이 같은 각 파일에 대해 다른 실행 파일을 추가해야합니다.
또한 이러한 .cxx파일은 동일한 외부 라이브러리에 링크되지 않을 수 있습니다.
이 빌드를 CMake로 작성하고 싶습니다. 저는 초보자 인데요. 어떻게해야합니까?
내 제안은 두 단계로이 문제를 해결하는 것입니다.
- 다음을 사용하여
.cpp및.h파일 에서 라이브러리를 빌드합니다.add_library - 반복 처리의 모든 통해
.cxx파일 및 사용하여, 각각의 실행 파일을 생성add_executable하고foreach
라이브러리 구축
이것은 다음과 같이 간단 할 수 있습니다.
file( GLOB LIB_SOURCES lib/*.cpp )
file( GLOB LIB_HEADERS lib/*.h )
add_library( YourLib ${LIB_SOURCES} ${LIB_HEADERS} )
모든 실행 파일 빌드
모든 .cpp 파일을 반복하고 별도의 실행 파일을 만듭니다.
# If necessary, use the RELATIVE flag, otherwise each source file may be listed
# with full pathname. RELATIVE may makes it easier to extract an executable name
# automatically.
# file( GLOB APP_SOURCES RELATIVE app/*.cxx )
file( GLOB APP_SOURCES app/*.cxx )
foreach( testsourcefile ${APP_SOURCES} )
# I used a simple string replace, to cut off .cpp.
string( REPLACE ".cpp" "" testname ${testsourcefile} )
add_executable( ${testname} ${testsourcefile} )
# Make sure YourLib is linked to each app
target_link_libraries( ${testname} YourLib )
endforeach( testsourcefile ${APP_SOURCES} )
몇 가지 경고 :
file( GLOB )새 파일이 추가되면 CMake가 자동으로 다시 빌드되지 않기 때문에 일반적으로 권장되지 않습니다. 나는 당신의 소스 파일을 모르기 때문에 여기에서 사용했습니다.- 일부 상황에서는 전체 경로 이름으로 소스 파일을 찾을 수 있습니다. 필요한 경우 RELATIVE 플래그를
find( GLOB ... )사용하십시오 . - 소스 파일을 수동으로 설정하려면 다시 빌드를 트리거하는 CMakeLists.txt를 변경해야합니다. globbing의 (단점) 장점에 대해서는 이 질문 을 참조하십시오 .
- 나는
string( REPLACE ... ). 플래그 와 함께 get_filename_component 를 사용할 수 있습니다NAME_WE.
"일반적인"CMake 정보와 관련하여 이미 여기에서 스택 오버플로에 대해 질문 한 광범위한 "CMake 개요"질문을 읽어 보시기 바랍니다. 예 :
참고 URL : https://stackoverflow.com/questions/14306642/adding-multiple-executables-in-cmake
반응형
'Program Club' 카테고리의 다른 글
| Bootstrap만으로 핀터 레스트와 같은 레이아웃을 만들 수 있습니까? (0) | 2020.12.08 |
|---|---|
| kill 프로세스와 close 프로세스의 차이점은 무엇입니까? (0) | 2020.12.08 |
| Typescript-다차원 배열 초기화 (0) | 2020.12.08 |
| Swift에서 let in protocol을 사용할 수없는 이유는 무엇입니까? (0) | 2020.12.08 |
| Intellij IDEA에 추가 javadoc 첨부 (0) | 2020.12.08 |