63 lines
2.1 KiB
CMake
63 lines
2.1 KiB
CMake
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) |