gpt4 book ai didi

cross-platform - 多个库和可执行文件的 CMakeLists.txt 文件

转载 作者:行者123 更新时间:2023-12-03 12:20:14 25 4
gpt4 key购买 nike

我刚开始玩 CMake。我有类似的东西:

/DEV
|-- lib1
| CMakeLists.txt

|-- lib2
| CMakeLists.txt

|-- exe1
| CMakeLists.txt

/BUILD
|-- lib1
|-- lib2
|-- exe1

/INSTALL
|-- include
|-- lib
|-- bin

我想要:
  • 需要时独立构建每个 lib 和 exe。 (所以我想我必须为每个 lib 和 exe 添加一个 CMakeLists.txt 文件);
  • 构建时,include 和 lib 目录应引用 INSTALL 目录; (这是个好主意吗?)
  • 构建时,将依赖项添加到其他库中,如果不是最新的,则重新构建它们。

  • 我不知道从哪里开始。请帮忙...

    最佳答案

    您不需要单独的 CMakeLists.txt 来独立构建目标。假设您有一个顶级 CMakeLists.txt :

    ADD_LIBRARY(lib1 ${all_lib1_files})
    ADD_LIBRARY(lib2 ${all_lib2_files})
    ADD_EXECUTABLE(exe1 ${all_exe1_files})
    TARGET_LINK_LIBRARIES(lib2 lib1) # lib2 now depends on lib1
    TARGET_LINK_LIBRARIES(exe1 lib2) # exe1 now depends on lib2 and lib1

    然后,您可以通过运行 make lib1msbuild lib1.vcxproj 等来构建 lib1。您可以通过为每个目标创建单独的 CMakeLists.txt 文件来实现相同的目标 - 如果您认为值得,这取决于您。

    如果您的项目使用 FIND_LIBRARYFIND_PACKAGE 导入这些目标,那么它们 将不会重建 如果它们不是最新的。最后,如果您希望自动重建过时的依赖项,您需要让 CMake 知道依赖目标的来源和规则,即 CMakeLists.txt 文件需要使用 ADD_LIBRARYADD_EXECUTABLE 添加目标。

    然后您不需要引用 INSTALL 目录(我想象的 INSTALL 命令除外),因为 CMake 在链接目标时将隐式使用 libs/exes 构建位置而不是安装位置。

    关于cross-platform - 多个库和可执行文件的 CMakeLists.txt 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9673326/

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