상세 컨텐츠

본문 제목

[CMAKE] add_custom_command()

cmake

by 빨간눈동자 2021. 11. 3. 00:00

본문

반응형
// 파일 : MathFunctions/CMakeLists.txt 
# first we add the executable that generates the table 
# add the binary tree directory to the search path for include files 

include_directories( ${CMAKE_CURRENT_BINARY_DIR} ) 
add_executable(MakeTable MakeTable.cxx )

# add the command to generate the source code
add_custom_command ( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Table.h
                     COMMAND MakeTable ${CMAKE_CURRENT_BINARY_DIR}/Table.h
                     DEPENDS MakeTable )
      
# add the main library
add_library(MathFunctions mysqrt.cxx ${CMAKE_CURRENT_BINARY_DIR}/Table.h )

install (TARGETS MathFunctions DESTINATION ${PROJECT_SOURCE_DIR}/bin)
install (FILES MathFunctions.h DESTINATION ${PROJECT_SOURCE_DIR}/include)

 

* add_custom_command() 는 별도의 executable 파일을 실행하는 명령어로, 위 예제에서는 MakeTable(bin) 파일을 사용한다.  따라서 add_custom_command() 전에 MakeTable (bin) 파일이 있어야 하며, 이는 add_executable(MakeTable MakeTable.cxx) 명령어로 MakeTable.cxx 파일을 빌드해서 MakeTable이 생성되고 있음을 알 수 있다. 

 

add_custom_command ( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Table.h
                     COMMAND MakeTable ${CMAKE_CURRENT_BINARY_DIR}/Table.h
                     DEPENDS MakeTable )

 

OUTPUT 으로 명시된 파일을 생성한다는 의미이며, COMMAND는 실제 명령을 수행하는 command이다. 

MakeTable.cxx 파일을 살펴보면, 

MakeTable 을 실행할 때, 인자 값으로 Table.h 를 전달 받는다. 전달 받은 인자 값(파일명)을 fopen()을 사용하여 파일을 open한 후, 내부적으로 수행한 결과를 Table.h에 fwrite()한다. 

결국 Tableh.h 파일은 MakeTable의 output이라고 보면된다. 

 

만약 MakeTable executable bin 파일이 변경이 되면, add_custom_command를 다시 수행해야한다.
Table.h 파일은 MakeTable bin 파일의 output이므로, MakeTable bin 파일이 변경되면 Table.h 파일을 생성해줘야한다.
DEPENDS 키워드가 이런 역할을 한다.

반응형

관련글 더보기