制作 - 如何将Googletest Lib列为依赖性

发布于 2025-02-12 00:46:30 字数 751 浏览 1 评论 0 原文

我能够构建 googletest> googletest 测试。

在我的 unit_test.cpp 中,我需要检查 googletest libs 中是否存在于中.. \ googletest \ 只有当它们不存在时,我想运行cmake并制作 googletest

运行Cmake并制造即使建造的时间也需要30秒,因此我只想运行CMAKE并在实际需要的情况下进行。

问题

我的我的 unit_test.cpp 的makefile中,我可以将 googletest 仅列为依赖项如果实际需要的话会发生吗?

一种“蛮力”方法是列表 googletest \ build \ lib \ libgtest.a ,但是如果不太可能, googletest 将破裂,将输出名称从 lib \ libs \

I am able to build googletest and use it to run unit tests.

In MY makefile for my unit_test.cpp, I need to check whether googletest libs exist in ..\googletest\ and only if they do not exist, I want to run cmake and make for googletest.

Running cmake and make even if they are built takes 30 secs so I only want to run cmake and make if I actually have to.

QUESTION

In MY makefile for my unit_test.cpp, what could I list as a dependency so that building googletest only happens if actually necessary?

A "brute force" approach would be to list googletest\build\lib\libgtest.a but this would break if, however unlikely, googletest changes the output name from lib\ to libs\.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

时光病人 2025-02-19 00:46:31

如果您担心构建目录中可能更改文件布局,则可以使用 cmake-安装命令,并在运行cmake配置步骤之前直接指定标头文件和库的子文件夹。 cmake_install_prefix 变量允许指定安装目录和 cmake_install_includedir cmake_install_libdir 变量允许指定标题文件和图书馆的子文件库:

GOOGLETEST_SRC_DIR := googletest
GOOGLETEST_BUILD_CACHE_DIR := googletest_build_cache

GOOGLETEST_SDK_DIR := googletest_sdk
GOOGLETEST_SDK_INCLUDE_DIR := include
GOOGLETEST_SDK_LIB_DIR := lib

GOOGLETEST_LIB := gtest
GOOGLETEST_MAIN_LIB := $(GOOGLETEST_LIB)_main

UT := ut
UT_SRC := ut.cpp

default_target: $(UT)

$(GOOGLETEST_BUILD_CACHE_DIR) :
    cmake                                                       \
      -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(GOOGLETEST_SDK_DIR) \
      -DCMAKE_INSTALL_LIBDIR=$(GOOGLETEST_SDK_LIB_DIR)          \
      -DCMAKE_INSTALL_INCLUDEDIR=$(GOOGLETEST_SDK_INCLUDE_DIR)  \
      -B $(GOOGLETEST_BUILD_CACHE_DIR) -S $(GOOGLETEST_SRC_DIR)
    cmake --build $(GOOGLETEST_BUILD_CACHE_DIR) --parallel
    touch $(GOOGLETEST_BUILD_CACHE_DIR)

$(GOOGLETEST_SDK_DIR): $(GOOGLETEST_BUILD_CACHE_DIR)
    cmake --install $(GOOGLETEST_BUILD_CACHE_DIR)
    touch $(GOOGLETEST_SDK_DIR)

$(UT): $(UT_SRC) $(GOOGLETEST_SDK_DIR)
    g++ $(UT_SRC) -o $(UT)                                  \
      -I$(GOOGLETEST_SDK_DIR)/$(GOOGLETEST_SDK_INCLUDE_DIR) \
      -L$(GOOGLETEST_SDK_DIR)/$(GOOGLETEST_SDK_LIB_DIR)     \
      -l$(GOOGLETEST_MAIN_LIB) -l$(GOOGLETEST_LIB)

clean:
    rm -f $(UT)
    rm -fR $(GOOGLETEST_BUILD_CACHE_DIR) $(GOOGLETEST_SDK_DIR)

If you are worried about possible change of the file layout in the build directory, you can use cmake --install command and directly specify the subfolders for header files and libraries before running cmake configure step. CMAKE_INSTALL_PREFIX variable allows to specify install directory and CMAKE_INSTALL_INCLUDEDIR, CMAKE_INSTALL_LIBDIR variables allow to specify subfolders for header files and libraries, accordingly:

GOOGLETEST_SRC_DIR := googletest
GOOGLETEST_BUILD_CACHE_DIR := googletest_build_cache

GOOGLETEST_SDK_DIR := googletest_sdk
GOOGLETEST_SDK_INCLUDE_DIR := include
GOOGLETEST_SDK_LIB_DIR := lib

GOOGLETEST_LIB := gtest
GOOGLETEST_MAIN_LIB := $(GOOGLETEST_LIB)_main

UT := ut
UT_SRC := ut.cpp

default_target: $(UT)

$(GOOGLETEST_BUILD_CACHE_DIR) :
    cmake                                                       \
      -DCMAKE_INSTALL_PREFIX=$(shell pwd)/$(GOOGLETEST_SDK_DIR) \
      -DCMAKE_INSTALL_LIBDIR=$(GOOGLETEST_SDK_LIB_DIR)          \
      -DCMAKE_INSTALL_INCLUDEDIR=$(GOOGLETEST_SDK_INCLUDE_DIR)  \
      -B $(GOOGLETEST_BUILD_CACHE_DIR) -S $(GOOGLETEST_SRC_DIR)
    cmake --build $(GOOGLETEST_BUILD_CACHE_DIR) --parallel
    touch $(GOOGLETEST_BUILD_CACHE_DIR)

$(GOOGLETEST_SDK_DIR): $(GOOGLETEST_BUILD_CACHE_DIR)
    cmake --install $(GOOGLETEST_BUILD_CACHE_DIR)
    touch $(GOOGLETEST_SDK_DIR)

$(UT): $(UT_SRC) $(GOOGLETEST_SDK_DIR)
    g++ $(UT_SRC) -o $(UT)                                  \
      -I$(GOOGLETEST_SDK_DIR)/$(GOOGLETEST_SDK_INCLUDE_DIR) \
      -L$(GOOGLETEST_SDK_DIR)/$(GOOGLETEST_SDK_LIB_DIR)     \
      -l$(GOOGLETEST_MAIN_LIB) -l$(GOOGLETEST_LIB)

clean:
    rm -f $(UT)
    rm -fR $(GOOGLETEST_BUILD_CACHE_DIR) $(GOOGLETEST_SDK_DIR)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文