cmake_minimum_required(VERSION 3.14) project(LuaCjApiTest) set(CMAKE_CXX_STANDARD 17) set(SCRIPT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/scripts" CACHE PATH "Path to Lua test scripts") add_compile_definitions(SCRIPT_DIR="${SCRIPT_DIR}") # ==================== 核心修改 ==================== # 1. 使用 add_subdirectory 直接包含 lib 源码目录 # 这会自动继承 lib 中定义的 luacjapi 目标及其依赖路径 # 无需手动检查文件是否存在,CMake 会处理整个依赖链 add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../lib ${CMAKE_BINARY_DIR}/lib_build) # ==================== 引入 Google Test ==================== # 优先使用本地源(网络受限环境): 环境变量 GTEST_LOCAL_DIR 或 /tmp/deps/googletest-1.14.0 if(DEFINED ENV{GTEST_LOCAL_DIR} AND EXISTS $ENV{GTEST_LOCAL_DIR}) set(FETCHCONTENT_SOURCE_DIR_GOOGLETEST $ENV{GTEST_LOCAL_DIR}) elseif(EXISTS /tmp/deps/googletest-1.14.0) set(FETCHCONTENT_SOURCE_DIR_GOOGLETEST /tmp/deps/googletest-1.14.0) endif() include(FetchContent) FetchContent_Declare( googletest GIT_REPOSITORY https://github.com/google/googletest.git GIT_TAG v1.14.0 GIT_SHALLOW ON ) set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) FetchContent_MakeAvailable(googletest) # ==================== 配置测试目标 ==================== add_executable(test_lua_cj_api test_lua_cj_api.cpp) # 2. 包含头文件路径 # 注意:由于 lib 项目使用的是旧式 include_directories,这里需要显式添加 # 或者更好的做法是修改 lib/CMakeLists.txt 使用 target_include_directories target_include_directories(test_lua_cj_api PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../lib ${CMAKE_CURRENT_SOURCE_DIR}/../lib/lua ) # 3. 链接库 # 直接链接 lib 项目导出的 luacjapi 目标。 # CMake 会自动处理 RPATH、库搜索路径和传递依赖(如 lua、m 等) target_link_libraries(test_lua_cj_api PRIVATE luacjapi # 来自 lib 项目 GTest::gtest_main pthread dl m ) # ==================== 注册测试 ==================== enable_testing() include(GoogleTest) gtest_discover_tests(test_lua_cj_api)