// 파일 : 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 키워드가 이런 역할을 한다.
[CMAKE] find_path() ( 환경변수 참조.. ) (0) | 2021.11.03 |
---|---|
[CMAKE] file() (0) | 2021.11.03 |
[CMAKE] include_directories() / install() (0) | 2021.11.02 |
[CMAKE] option() / add_subdirectory() / target_link_libraries() / add_library() (0) | 2021.11.02 |
[CMAKE] set() / configure_file() / include_directories() (0) | 2021.11.02 |