Как я могу связать библиотеку с исполняемым файлом?
Извините, если это простая проблема, я очень новичок для CMake.
Кажется, у меня проблемы с подключением VTK + QT к существующему проекту. Проблемы связаны со строками target_link_libraries
, утверждая, что цель не встроена в каталог. Однако, это должно быть потому, что он создает исполняемый файл без дополнений (из-за set(EXECUTABLE_NAME ${PROJECT_NAME})
верно?).
Если я пытаюсь создать другой исполняемый файл, используя add_executable
, он жалуется, что он уже есть, так почему CMake не может его обнаружить?
После долгих поисков и поисков я могу только найти людей, которые используют add_executable
после target_link_libraries
. Так что, насколько я понимаю, это не относится к этому делу.
Вот CMakeFile.txt
- объединение тока CMakeFile
и CMakeFile
из примеров 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})
Большое спасибо.