Program Club

CMake에서 여러 실행 파일 추가

proclub 2020. 12. 8. 20:12
반응형

CMake에서 여러 실행 파일 추가


C ++ 프로젝트의 내 코드는 다음과 같이 구성됩니다.

  • 나는 몇이 .cpp하고 .h있는 파일은 내 클래스가 포함되어 있습니다
  • 파일과 일부 외부 라이브러리 .cxx에 대해 컴파일 해야하는 여러 파일이 있습니다 .cpp.

이제 각 .cxx파일에는 main()메서드가 있으므로 파일과 이름이 같은 각 파일에 대해 다른 실행 파일을 추가해야합니다.

또한 이러한 .cxx파일은 동일한 외부 라이브러리에 링크되지 않을 수 있습니다.

이 빌드를 CMake로 작성하고 싶습니다. 저는 초보자 인데요. 어떻게해야합니까?


내 제안은 두 단계로이 문제를 해결하는 것입니다.

  1. 다음을 사용하여 .cpp.h파일 에서 라이브러리를 빌드합니다.add_library
  2. 반복 처리의 모든 통해 .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

반응형