Linuxias
Developer's Delight
Linuxias
  • Category
    • AI
      • Deep Learning
      • Machine Learning
      • Data Science
      • Framework
      • MLOps
      • Paper-Review
      • Tips
    • Android
      • Kotlin
      • Component
      • Compose
      • Compose UI
      • Material
      • Testing
    • Software Architecture
      • Architecture Pattern
      • Design Pattern
      • Requirement Engineering
    • Linux
      • Compile & Link
      • Command & Tool
      • Container
      • Debugging & Testing
      • Profiling
      • Kernel Analysis
      • Server
      • Shell Script
      • System Programming
    • Language
      • Carbon
      • C,C++
      • C#
      • Java
      • Python
    • ETC
      • Data Struct | Algorithm
      • git
      • Security
    • Book
    • 경제공부
      • 세금
      • 부동산
hELLO · Designed By 정상우.
Linuxias

Developer's Delight

Linux/Command & Tool

[CMake] CMakeLists.txt 명령

2017. 11. 10. 18:52
반응형

CMAKE_MINIMUM_REQUIRED()

[문법]

cmake_minimum_required(VERSION major.minor[.patch[.tweak]]

                       [FATAL_ERROR])


[설명]

CMakeLists.txt 파일에 가장 먼저 호출되어야 하는 명령어로, Project name을 명시하는 project() 명령보다 먼저 호출된다. Cmake build를 실행하기 위한 최소 버전을 명시하여 만약 CMake의 현재 버전이 cmake_minimum_required()에 명시된 버전보다 낮다면 build 진행을 멈추고 에러를 출력한다.




ADD_DEFINITIONS()

[문법]

target_include_directories(-DFOO -DBAR ...)


[설명]

현재 디렉토리 및 하위 경로에 대한 컴파일러 명령 행에 전달할 매크로를 추가하는 명령어이다.

예를 들어 ADD_DEFINITIONS(-DFOO=1) 이면, FOO란 매크로 값을 1로 정의하게 된다.




ADD_EXECUTABLE()

[문법]

add_executable(<name> [WIN32] [MACOSX_BUNDLE]

               [EXCLUDE_FROM_ALL]

               source1 [source2 ...])


[설명]

<name>으로 명명된 실행파일을 생성한다. 이때 build를 위한 source파일들을 source1, source2.. 와 같이 추가한다.

예시로 ADD_EXECUTABLE(a.out a.c b.c c.c d.c) 라 명시하면, a.c, b.c, c.c, d.c 소스파일을 이용하여 a.out이란 실행파일을 생성할 수 있다. source는 List형태로 전달이 가능하기에 AUX_SOURCE_DIRECTORY() 또는 SET() 으로 명시한 이름을 전달할 수도 있다.




ADD_SUBDIRECTORY()

[문법]

add_subdirectory(source_dir [binary_dir][EXCLUDE_FROM_ALL])


[설명]

빌드를 위한 Sub directory를 지정하는 명령어이다. source_dir 는코드 파일과 CMakeLists.txt가 위치한 directory를 명시해준다. [binary_dir]은 출력 파일을 저장할 디렉토리를 지정한다. 상대 경로이면 현재 디렉토리와 관련하여 수행되지만 절대 경로 일 수도 있습니다. [binary_dir]을 지정하지 않으면 상대 경로를 확장하기 전에 source_dir 값이 사용된다 (일반적인 사용법). 현재 입력 파일에서 처리하기 전에 CMake에 의해 지정된 소스 디렉토리의 CMakeLists.txt 파일이 이 명령을 넘어서 계속 처리된다.




ADD_SUBDIRECTORY()

[문법]

add_subdirectory(source_dir [binary_dir][EXCLUDE_FROM_ALL])


[설명]

빌드를 위한 Sub directory를 지정하는 명령어이다. source_dir 는코드 파일과 CMakeLists.txt가 위치한 directory를 명시해준다. [binary_dir]은 출력 파일을 저장할 디렉토리를 지정한다. 상대 경로이면 현재 디렉토리와 관련하여 수행되지만 절대 경로 일 수도 있습니다. [binary_dir]을 지정하지 않으면 상대 경로를 확장하기 전에 source_dir 값이 사용된다 (일반적인 사용법). 현재 입력 파일에서 처리하기 전에 CMake에 의해 지정된 소스 디렉토리의 CMakeLists.txt 파일이 이 명령을 넘어서 계속 처리된다.




AUX_SOURCE_DIRECTORY()

[문법]

aux_source_directory(<dir> <variable>)


[설명]

<dir>에 명시된 모든 source file들의 이름을 <variable>에 리스트로 저장한다.

이 명령을 사용하여 라이브러리 또는 실행 가능한 대상의 소스 파일 목록을 작성하는 것을 피할 수 있다. 

위 명령에서 새로운 소스 파일이 추가되었을 때 자동적으로 make 시 확인할 수 있는 방법이 없다. 일반적으로 생성된 빌드 시스템은 CMakeListsts.txt파일이 새 소스를 추가하도록 수정되었으므로 CMake를 다시 실행해야 한다. 이 파일을 수정하지 않고 디렉토리에 추가하면 수동으로 CMake를 다시 실행하여 새 파일을 포함하는 빌드 시스템을 생성해야 한다.





INCLUDE_DIRECTORIES()

[문법]

include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])


[설명]

컴파일러가 컴파일 시 header file을 검색하는 데 사용할 디렉토리 경로를 추가한다.





LINK_LIBRARIES()

[문법]

link_libraries([item1 [item2 [...]]]

               [[debug|optimized|general] <item>] ...)


[설명]

나중에 추가된 모든 대상에 라이브러리를 연결합니다. 즉 모든 Target에 공통적으로 적용할 Library를 명시해줍니다. 이 때 -l 은 포함하지 않습니다. 예를 들어 모든 Target이 pthread library를 필요로 한다면 LINK_LIBRARIES(pthread) 로 명시해줍니다.





TARGET_LINK_LIBRARIES()

[문법]

link_libraries(<target> ... <item> ...)


[설명]

위에 설명한 LINK_LIBRARIES와 기능은 같으나 특정 Target에만 설정하는 명령어입니다. 사용법은 동일하나 앞에 Target을 지정해줍니다.




CONFIGURE_FILE()

[문법]

configure_file(<input> <output>

               [COPYONLY] [ESCAPE_QUOTES] [@ONLY]

               [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])


[설명]

<input> file을 <output>으로 복사하고 <input> 파일 내용에 @VAR@ 또는 ${VAR} 로 참조되는 변수 값을 대체합니다. 각 변수 참조는 변수의 현재 값으로 대체되거나 변수가 정의되지 않은 경우에는 빈 문자열로 대체됩니다.


[옵션]

@ONLY : 변수 대체를 @VAR@ 형식으로 제한합니다. 

COPYONLY : 변수 대체 없이 오직 파일 복사만 이뤄집니다.






TARGET_*


[설명]

특정 Target 별 설정을 위한 명령어들이다. 항상 이 명령어들의 첫 번째 파라미터는 Target name이다.



TARGET_INCLUDE_DIRECTORIES()

[문법]

target_include_directories(<target> [SYSTEM] [BEFORE]

  <INTERFACE|PUBLIC|PRIVATE> [items1...]

  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])


[설명]

Target에 포함될 Source 파일들이 참조하고 있는 Header file을 포함하고 있는 Directory를 명시한다.

여기서 target은 add_executable()이나 add_library()같은 명령어로 생성되어지는 target의 name이다.





반응형
저작자표시 (새창열림)

'Linux > Command & Tool' 카테고리의 다른 글

[rpm] package file variables  (0) 2017.11.16
[CMake] CMakeLists.txt 변수  (0) 2017.11.13
프로세스가 사용중인 fd 확인방법  (0) 2017.11.01
Linux hardware info 확인 위한 Command 모음  (1) 2017.05.14
[LinuxCommand] 쉘 커맨드 확인하는 사이트  (0) 2015.11.19
    'Linux/Command & Tool' 카테고리의 다른 글
    • [rpm] package file variables
    • [CMake] CMakeLists.txt 변수
    • 프로세스가 사용중인 fd 확인방법
    • Linux hardware info 확인 위한 Command 모음
    Linuxias
    Linuxias
    I want to be a S/W developer who benefits people.

    티스토리툴바