gpt4 book ai didi

cmake - 避免使用 CMake 重新编译常见的目标文件?

转载 作者:行者123 更新时间:2023-12-04 22:16:19 62 4
gpt4 key购买 nike

我最近通过 CMake 将测试添加到我的一个项目中。我通过创建另一个将运行我的测试用例的可执行文件来做到这一点。我项目中的测试用例使用我的主应用程序中的代码。每次我对主应用程序和测试运行程序之间共享的源文件进行更改时,它都会重新编译该对象两次。一次用于主应用程序,第二次用于测试运行器。

有没有办法可以为两者共享相同的目标文件?

我的 CMakeLists 文件看起来像这样。

AUX_SOURCE_DIRECTORY(${SRC_DIR}/game game_SRC)
AUX_SOURCE_DIRECTORY(${SRC_DIR}/framework/ framework_SRC)

ADD_EXECUTABLE(${CMAKE_PROJECT_NAME}
${game_SRC} ${framework_SRC})

# --- Testing ---
ENABLE_TESTING()
AUX_SOURCE_DIRECTORY(${TEST_DIR} test_SRC)

ADD_EXECUTABLE(${TEST_RUNNER_NAME}
${test_SRC}
${framework_SRC}
)

最佳答案

是的,通过使您的框架成为一个单独的库。现在,您将 framework_SRCS 指定为项目可执行文件的源,然后还为 test-runner 可执行文件指定相同的源。 CMake 只是从指定的源构建两个可执行文件。

更糟糕的是,CMake 不能轻易假设相同的源文件将完全相同地用于两个可执行文件。如果您的测试和应用程序之间有几个不同的编译标志怎么办?

最简单的方法是将您的 framework_SRCS 链接到一个库中,然后指定一个链接依赖项:

ADD_LIBRARY( MyFramework STATIC ${framework_SRCS} )

ADD_EXECUTABLE(${CMAKE_PROJECT_NAME}
${game_SRC})
TARGET_LINK_LIBRARIES( ${CMAKE_PROJECT_NAME} MyFramework )

# --- Testing ---
ENABLE_TESTING()
AUX_SOURCE_DIRECTORY(${TEST_DIR} test_SRC)

ADD_EXECUTABLE(${TEST_RUNNER_NAME}
${test_SRC}

TARGET_LINK_LIBRARIES( ${TEST_RUNNER_NAME} MyFramework )

(请注意,我明确选择静态构建库。当然,您可以选择将其留给 cmake 或强制执行共享构建)

问候, 安德烈

关于cmake - 避免使用 CMake 重新编译常见的目标文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4614137/

62 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com