尝试使用CMake添加库导致错误

时间:2019-08-21 15:48:52

标签: c++ cmake clion

我正在尝试将外部.lib文件添加到使用CMake的Clion项目中。我的代码非常简单,仅用于测试是否包含该库:

#include <iostream>
#include "header/test.h"
int main() {
test a; // returns error saying undefined reference to 'test::test()'
return 0;
}

运行此代码时,出现以下错误:

 undefined reference to `test::test()'

这是因为我试图制作一个测试对象,但是不包括用于测试的库。

test.lib文件和test.h文件都位于项目文件夹根目录中的“ header”文件夹中。该文件的路径是F:\ Project \ header \

我的Cmake文本文件如下:

cmake_minimum_required(VERSION 3.14)
project(Project)

set(CMAKE_CXX_STANDARD 14)

add_executable(Project main.cpp)
target_link_libraries(Project 
F:\\Project\\header\\test.lib)

在cmake文本文件中,使用以下行:           target_link_libraries(Project F:\ Project \ header \ test.lib)

这应该包括库文件,但是似乎没有,因为如上所述,我收到“未定义的引用...”错误。 Cmake编译器没有给我错误。

1 个答案:

答案 0 :(得分:1)

从概念上讲您是正确的,但是您不是以CMake的方式这样做。查看有关如何链接外部库的以下链接。

CMake link to external library

cmake doesn't support imported libraries?

https://gitlab.kitware.com/cmake/community/wikis/doc/tutorials/Exporting-and-Importing-Targets

对于您的情况,如下所示:

cmake_minimum_required(VERSION 3.14)
project(Project)

set(CMAKE_CXX_STANDARD 14)

# Import the library into the CMake build system
ADD_LIBRARY(test SHARED IMPORTED)

# Specify the location of the library 
SET_TARGET_PROPERTIES(TARGET test PROPERTIES IMPORTED_LOCATION “/path/to/lib/test.dll”)

# create the executable   
add_executable(Project main.cpp)

# Link your exe to the library
target_link_libraries(Project test)

CMake文档非常好。我建议您在遇到问题时进行检查。

https://cmake.org/cmake/help/latest/command/add_library.html#imported-libraries