Note

You are not reading the most recent version of this documentation. 1.4.7 is the latest version available.

Build System Integration

XXXX

Bazel

CMake

find_package(Threads REQUIRED)

set(COCO_PATH coco)

file(GLOB_RECURSE COCO_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/*.coco")

# Calculate the output files based on the .coco file names
set(COCO_GENERATED_HEADERS)
set(COCO_GENERATED_SOURCES)

foreach(file ${COCO_SOURCES})
    string(REGEX REPLACE "^src/(.*)[.]coco$" "generated/\\1.h" hdr ${file})
    string(REGEX REPLACE "^src/(.*)[.]coco$" "generated/\\1.cc" src ${file})
    list(APPEND COCO_GENERATED_HEADERS ${hdr})
    list(APPEND COCO_GENERATED_SOURCES ${src})
endforeach()

# Generate normal .cc/.h files and create a library for them
add_custom_command(
    OUTPUT ${COCO_GENERATED_HEADERS} ${COCO_GENERATED_SOURCES}
    COMMAND ${COCO_PATH} --package ${CMAKE_CURRENT_SOURCE_DIR} generate-cpp --output-empty-files
    DEPENDS ${COCO_SOURCES}
)
add_library(GeneratedCoco STATIC ${COCO_GENERATED_SOURCES})
target_include_directories(GeneratedCoco PUBLIC generated src-cpp)

# add the executable
add_executable(Tutorial ${CC_SOURCES})
target_link_libraries(Tutorial PRIVATE Threads::Threads GeneratedCoco)