我正在使用CLion和mingw-w64。
我的可执行文件的CMakeLists.txt:
cmake_minimum_required(VERSION 3.12)
project(test_exe)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "D:\\test")
add_subdirectory(test_lib)
include_directories(test_lib/include;test_lib/deps/include)
link_directories(test_lib/deps/lib)
add_executable(test_exe main.cpp)
target_link_libraries(test_exe test_lib)
test_lib的CMakeLists.txt:
cmake_minimum_required(VERSION 3.12)
project(test_lib)
set(CMAKE_CXX_STANDARD 17)
include_directories(include;deps/include)
link_directories(deps/lib)
file(GLOB_RECURSE LIB_SOURCES "include/*.*" "src/*.*")
add_library(test_lib SHARED ${LIB_SOURCES})
target_link_libraries(test_lib libfreetype.a libpugixml.dll.a)
问题在于,当我添加带有add_library(test_lib SHARED ${LIB_SOURCES})
的库时,我会遇到undefined reference
错误,但是当我添加带有add_library(test_lib ${LIB_SOURCES})
的库时,它会很好地工作。
一个空项目链接按预期方式(SHARED和STATIC),但是我不知道为什么这个项目不起作用?由于存在库,因此我链接到test_lib的CMakeLists.txt中?
答案 0 :(得分:1)
构建静态库时,不会发生链接。它不会检查您是否具有所有必需的库。
当您对共享库进行相同操作时,然后在某些平台(例如Windows或具有-X defs的Linux)上,您需要解决所有引用。
您有一个共享库。