gpt4 book ai didi

makefile - CMAKE:构建库并链接到它

转载 作者:行者123 更新时间:2023-12-04 00:05:29 24 4
gpt4 key购买 nike

我正在尝试使用 cmake(在带有 GNU make 和 g++ 的 Linux 上)构建一个包含两个子目录的项目:MyLib 和 MyApp。 MyLib 包含静态库的源代码; MyApp 需要链接到该库。我正在尝试使用以下 CMakeLists.txt 在 Linux 上构建生成的 makefile:

cmake_minimum_required (VERSION 2.6)
project (MyProj)
include_directories (MyLib)
file(GLOB MyLibSrc MyLib/*.cpp)
add_library(MyLibrary STATIC ${MyLibSrc})
file(GLOB MyAppSrc MyApp/*.cpp)
add_executable(MyApplication ${MyAppSrc})
target_link_libraries(MyApplication MyLibrary)

这“几乎”有效。它在链接时失败,因为当它生成 libMyLibrary.a 时 - 它位于根目录中。当我添加:
link_directories(${MyProj_BINARY_DIR})

没有什么不同的。

我有几个(相互关联的)问题:
  • 强制 cmake 将我的库和可执行文件构建到“暂存目录”(例如 MyStage)以将目标与源分开的最佳方法是什么?
  • 如何说服 cmake 将应用程序链接到库?
  • 如果我想构建一个调试版本和一个发布版本,扩展我的 cmake 脚本来做到这一点的最佳方法是什么——确保调试应用程序链接到调试库,发布应用程序链接到发布库?

  • 我是 cmake 的新手。我已经阅读了我可以在网上找到的内容,但发现自己很难让我的库与我的可执行文件链接。在我看来,这种配置应该很常见。一个婴儿床的例子会很有帮助,但我还没有找到。

    最佳答案

    嗯,最好读这个example并完全按照建议做。

    cmake_minimum_required (VERSION 2.6)
    project (MyProj CXX)
    add_subdirectory(MyLib)
    add_subdirectory(MyApp)

    然后为每个指定的子目录创建 CMakeLists.txt 文件

    MyLib\CMakeLists.txt
    file(GLOB SRC_FILES *.cpp)
    add_library(MyLib ${SRC_FILES})

    MyApp\CMakeLists.txt
    file(GLOB SRC_FILES *.cpp)
    add_executable(MyApp ${SRC_FILES})
    target_link_libraries(MyApp MyLib)

    关于makefile - CMAKE:构建库并链接到它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7819647/

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