Files
startra/CMakeLists.txt
2025-12-10 23:44:52 +08:00

63 lines
2.1 KiB
CMake
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
cmake_minimum_required(VERSION 4.0)
project(startra)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
# 添加子目录
#add_subdirectory(src/common)
#add_subdirectory(src/compiler)
#add_subdirectory(src/vm)
#add_subdirectory(src/c_api)
#add_subdirectory(tools/cli)
#add_subdirectory(tests)
# 引入 Flatbuffer 库
set(FLATBUFFERS_DIR "ext/flatbuffer") # <--- 请根据实际文件夹名修改这里!!!
set(FLATBUFFERS_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(FLATBUFFERS_INSTALL OFF CACHE BOOL "" FORCE)
add_subdirectory(${FLATBUFFERS_DIR})
include(${FLATBUFFERS_DIR}/CMake/BuildFlatBuffers.cmake)
# 主程序
add_executable(startra src/main.cpp)
# 自动编译 Schema 文件
set(SCHEMA_DIR "${CMAKE_CURRENT_SOURCE_DIR}/schemas")
set(SCHEMA_FILE "${SCHEMA_DIR}/bytecode.fbs")
set(GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
set(GENERATED_HEADER "${GENERATED_DIR}/bytecode_generated.h")
# 添加自定义命令:调用 flatc 生成 .h
add_custom_command(
OUTPUT ${GENERATED_HEADER}
COMMAND ${CMAKE_COMMAND} -E make_directory ${GENERATED_DIR}
COMMAND $<TARGET_FILE:flatc> --cpp --scoped-enums -o ${GENERATED_DIR} ${SCHEMA_FILE}
DEPENDS flatc ${SCHEMA_FILE}
COMMENT "Running FlatBuffers compiler on ${SCHEMA_FILE}..."
VERBATIM
)
# 创建一个自定义 Target让 CMake 知道何时生成它
add_custom_target(generate_schema_headers DEPENDS ${GENERATED_HEADER})
# =========================================================
# 4. 链接与依赖 (Order Matters!)
# =========================================================
# 让 startra 依赖生成任务 (确保编译 C++ 前,头文件已经生成好了)
add_dependencies(startra generate_schema_headers)
# 包含路径
target_include_directories(startra PRIVATE
src
${FLATBUFFERS_DIR}/include # 引用 flatbuffers 库本身的头文件
${GENERATED_DIR} # 引用我们生成的 bytecode_generated.h
)
# 链接库
target_link_libraries(startra flatbuffers)