如何链接从其他CMakeList添加的库

时间:2019-04-12 22:38:17

标签: cmake

Project folder
|\ - Library folder
|     - CMakeLists.txt (1)
|
 \ - Tests folder
      - CMakeLists.txt (2)

我在(1)中使用add_library
我想在CMakelists.txt(2)中使用target_link_libraries( tests library )

我完全被CMake迷住了。我已经使用了一段时间了,但这确实使我震惊。 link_directories,find_library,接口,全局;他们非常困惑。

1 个答案:

答案 0 :(得分:0)

您没有提供太多错误信息或代码来真正理解问题,但根据您的描述,存在一些潜在问题:

  1. 您可能缺少顶级CMakeLists.txt文件,无法将CMake文件(1)和(2)绑在一起。
  2. 您的CMake文件(1)和(2)之间的目标/变量命名不一致。

对于诸如此类的项目,典型的CMake文件层次结构将包括顶级CMakeLists.txt文件,其内容如下:

cmake_minimum_required(VERSION 3.9)
project(MyProject1)

add_subdirectory(LibraryFolder)
add_subdirectory(TestsFolder)

add_subdirectory命令告诉CMake在其他地方寻找其他CMake文件和您要构建的其他源代码。在这种情况下,CMake将在LibraryFolderTestsFolder目录中查找。

您的另外两个CMakeLists.txt文件可能类似于以下内容:

CMakeLists.txt (在LibraryFolder中)

project(MyLibraryProject)
# Define the library, named MyLibrary1, that you want to build here.
add_library(MyLibrary1
    Puppy.cpp
    Puppy.hpp
)

CMakeLists.txt (在TestsFolder中)

project(MyTestsProject)
# Define the executable, named MyTestExecutable, that you want to build here.
add_executable(MyTestExecutable
    main.cpp
)
# Link libraries that your executable depends on.
target_link_libraries(MyTestExecutable MyLibrary1)

请确保提供给add_subdirectory的文件夹名称与系统上的文件夹名称匹配,并且确保CMake目标名称(例如MyLibrary1)在文件中保持一致。

在调试CMake时,我总是发现使用message命令来打印屏幕上感兴趣的任何变量会很有帮助。这样可以更轻松地验证CMake是否正在执行我们的预期。

如果您仍有疑问,建议您仔细阅读答案here,该答案提供了有关如何使用CMake的更多上下文和概述。