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,接口,全局;他们非常困惑。
答案 0 :(得分:0)
您没有提供太多错误信息或代码来真正理解问题,但根据您的描述,存在一些潜在问题:
CMakeLists.txt
文件,无法将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将在LibraryFolder
和TestsFolder
目录中查找。
您的另外两个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的更多上下文和概述。