Основной CMake:
Код: Выделить всё
cmake_minimum_required (VERSION 3.12)
# Enable Hot Reload for MSVC compilers if supported.
if (POLICY CMP0141)
cmake_policy(SET CMP0141 NEW)
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$")
endif()
project ("e57test" LANGUAGES CXX )
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
add_executable (${PROJECT_NAME}
"src/main.cpp"
)
# Find Boost
find_package(Boost REQUIRED COMPONENTS thread)
target_link_libraries(${PROJECT_NAME} PRIVATE ${Boost_LIBRARIES})
# VTK
find_package(VTK REQUIRED)
include("${VTK_USE_FILE}")
include_directories(${VTK_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} PRIVATE ${VTK_LIBRARIES})
# PCL
find_package(Eigen3 CONFIG REQUIRED)
find_package(PCL CONFIG REQUIRED COMPONENTS io octree visualization filters segmentation registration)
include_directories( ${PCL_INCLUDE_DIRS})
add_definitions(${PCL_DEFINITIONS})
target_include_directories(${PROJECT_NAME} PRIVATE ${PCL_INCLUDE_DIRS} ${VTK_INCLUDE_DIRS})
target_compile_definitions(${PROJECT_NAME} PRIVATE VTK_LEGACY_SILENT -DNO_EXPLICIT_INSTANTIATIONS)
target_compile_options(${PROJECT_NAME} PRIVATE ${PCL_COMPILE_OPTIONS})
target_link_libraries(${PROJECT_NAME} PRIVATE Eigen3::Eigen ${VTK_DEFINITIONS} ${PCL_LIBRARIES})
# E57Wrapper
add_subdirectory("e57wrapper")
get_target_property(LIBB_INCLUDES e57wrapper INCLUDE_DIRECTORIES)
target_link_libraries(${PROJECT_NAME} PRIVATE e57wrapper)
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17)
Код: Выделить всё
#include "e57wrapper/E57Wrapper.hpp"
int main(int argc, char** argv)
{
foo();
}
Код: Выделить всё
cmake_minimum_required (VERSION 3.12)
if(MSVC)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
endif()
project (e57wrapper LANGUAGES CXX )
add_library(e57wrapper SHARED
"E57Wrapper.cpp"
)
# PCL
find_package(Eigen3 CONFIG REQUIRED)
find_package(PCL CONFIG REQUIRED)
include_directories( ${PCL_INCLUDE_DIRS})
add_definitions(${PCL_DEFINITIONS})
target_include_directories(${PROJECT_NAME} PUBLIC ${PCL_INCLUDE_DIRS} ${VTK_INCLUDE_DIRS})
target_compile_definitions(${PROJECT_NAME} PRIVATE VTK_LEGACY_SILENT -DNO_EXPLICIT_INSTANTIATIONS)
target_compile_options(${PROJECT_NAME} PRIVATE ${PCL_COMPILE_OPTIONS})
target_link_libraries(${PROJECT_NAME} PRIVATE Eigen3::Eigen ${VTK_DEFINITIONS} ${PCL_LIBRARIES})
# e57Format
find_package( E57Format CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE E57Format)
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
# Output .dll to built .exe location
set_target_properties(e57wrapper PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
)
Код: Выделить всё
#include "E57Wrapper.hpp"
//other functions
Код: Выделить всё
#pragma once
#include
#include
#include
//other functions
inline void foo()
{
e57::RigidBodyTransform a = e57::RigidBodyTransform(); // Fails to link
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78494558/c-cmake-visual-studio-failing-to-link-external-libraries-when-called-from-h[/url]