CMake:目标链接库

里奇·卡特赖特

如何将库链接到正在制作的可执行文件?如果这是一个简单的问题,请原谅,我对 CMake陌生。

我似乎在将 VTK+QT 附加到现有项目时遇到问题。问题在于target_link_libraries行,声称目标不在目录中。但是,这一定是因为它构建了一个没有添加的可执行文件(由于set(EXECUTABLE_NAME ${PROJECT_NAME})正确?)。如果我尝试使用 制作另一个可执行文件add_executable,它会抱怨说已经有一个,那么为什么 CMake 不能检测到它呢?

经过大量的谷歌搜索和在这里搜索后,我似乎只能找到使用add_executableafter 的人target_link_libraries所以据我所知,这不适用于这种情况。

这是CMakeFile.txt- 这是电流CMakeFileCMakeFile来自 VTK 示例的合并

cmake_minimum_required(VERSION 3.0)

if(POLICY CMP0020)
    cmake_policy(SET CMP0020 NEW)
endif()

set(PROJECT_NAME "BRDFViz")
set(EXECUTABLE_NAME ${PROJECT_NAME})
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

project(
  ${PROJECT_NAME}
  VERSION 1.0
  LANGUAGES CXX
  )

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")

include(FindPackageHandleStandardArgs)

## Assimp
find_package(assimp REQUIRED)

# VTK
find_package(VTK REQUIRED)
include(${VTK_USE_FILE})

## GLM
set(GLM_FIND_REQUIRED TRUE)
find_path(
  GLM_INCLUDE_DIRS "glm/glm.hpp"
  )
find_package_handle_standard_args(
  GLM
  DEFAULT_MSG
  GLM_INCLUDE_DIRS
  )

## libpng, PNG++
find_package(PNG REQUIRED)
set(png++_FIND_REQUIRED TRUE)
find_path(
  png++_INCLUDE_DIRS
  NAMES "png++/color.hpp" "png++/png.hpp"
  )
find_package_handle_standard_args(
  png++
  DEFAULT_MSG
  png++_INCLUDE_DIRS
  )

## libjpeg
find_package(JPEG REQUIRED)

## OpenEXR
find_package(OpenEXR REQUIRED)
add_subdirectory(src)

if(${VTK_VERSION} VERSION_GREATER "6" AND VTK_QT_VERSION VERSION_GREATER "4")
    set(CMAKE_AUTOMOC ON)
    find_package(Qt5Widgets REQUIRED)
else()
    message([FATAL_ERROR] "BRDFViz requires VTK 7 and QT 5 or higher. \n Exiting processing and generation") 
endif()

 include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
file(GLOB UI_FILES *.ui)
file(GLOB QT_WRAP *.h)
if(${VTK_VERSION} VERSION_GREATER "6" AND VTK_QT_VERSION VERSION_GREATER "4")
    qt5_wrap_ui(UISrcs ${UI_FILES})
    target_link_libraries(${PROJECT_NAME} Gt5::Core Qt5::Gui) 
else()
    message([FATAL_ERROR] "BRDFViz requires VTK 7 and QT 5 or higher. \n Exiting processing and generation")
endif()

target_link_libraries(${PROJECT_NAME} ${VTK_LIBRARIES})

非常感谢。

德米特里

set(EXECUTABLE_NAME ${PROJECT_NAME})命令几乎不EXECUTABLE_NAME使用另一个变量的值创建一个变量,PROJECT_NAME. 它不会告诉 CMake 构建实际的可执行文件,因此您实际上应该使用add_executable. 但是,target_link_libraries尽管我不完全确定 CMake 无法处理相反的顺序,但它确实应该在此之前

如果我尝试使用“add_executable”创建另一个可执行文件,它会抱怨说已经有一个可执行文件,那么为什么 CMake 不能检测到它呢?

您的问题似乎是由于您实际上add_executable在另一个CMakeLists.txt位于您src通过添加子目录中的事实引起的add_subdirectory(src)一个解决方案,您的问题可能会移动target_link_librariesCMakeLists.txt你的内部src目录,并移动add_subdirectory(src)到年底CMakeLists.txt,你已经证明:这种方式在CMakeLists.txt这里面src子目录,你将有机会获得所有父定义的变量CMakeLists.txt+ CMake的应该停止抱怨无法链接库,因为目标是在另一个目录中构建的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

CMake链接库目标链接错误

来自分类Dev

在cmake中显示目标的链接库列表

来自分类Dev

CMake链接库(.a / .so)

来自分类Dev

NDK 链接库与 cmake

来自分类Dev

CMake用户构建的库;无法为目标指定链接库

来自分类Dev

附加到目标链接库

来自分类Dev

cmake target_link_libraries()启动错误无法为目标“调试”指定链接库

来自分类Dev

收到CMake错误:无法为非项目创建的目标指定链接库

来自分类Dev

Cmake OpenCV无法指定链接库

来自分类Dev

如何使用CMake链接库?

来自分类Dev

如何使用cmake正确链接库?

来自分类Dev

Cmake OpenCV无法指定链接库

来自分类Dev

使用CMake链接库OpenSubdiv

来自分类Dev

CMake:如何从并行目录链接库

来自分类Dev

CMake 无法正确链接库

来自分类Dev

最后针对所有目标链接库

来自分类Dev

子目录中的CMake链接库

来自分类Dev

如何在CMake中使用动态链接库?

来自分类Dev

CMake:反正有强制链接库的问题吗?

来自分类Dev

CMAKE查找程序包,但不链接库

来自分类Dev

CMake - 链接库未在 MSVC 下显示

来自分类Dev

MakeFile:链接库-Mingw

来自分类Dev

iOS:取消链接库

来自分类Dev

制作和链接库

来自分类Dev

在C ++中链接库

来自分类Dev

用G ++链接库

来自分类Dev

xcodebuild命令链接库

来自分类Dev

Gcc不链接库

来自分类Dev

尝试获取目标链接库信息时,获取属性返回空变量