chore: support windows static lib build

Cherry-picked from: marcoesposito1988/kdl_parser@472f8bf
This commit is contained in:
insleker 2025-07-18 10:59:50 +08:00
parent f49e4991db
commit d99508b29e
3 changed files with 13 additions and 4 deletions

View File

@ -99,6 +99,7 @@ else()
find_package(tinyxml REQUIRED CONFIG) find_package(tinyxml REQUIRED CONFIG)
find_package(tinyxml2 REQUIRED CONFIG) find_package(tinyxml2 REQUIRED CONFIG)
add_library(${PROJECT_NAME} src/kdl_parser.cpp) add_library(${PROJECT_NAME} src/kdl_parser.cpp)
if(WIN32) if(WIN32)
set(BUILD_SHARED_LIBS ON) set(BUILD_SHARED_LIBS ON)
target_compile_definitions(${PROJECT_NAME} PUBLIC "KDL_PARSER_BUILDING_DLL") target_compile_definitions(${PROJECT_NAME} PUBLIC "KDL_PARSER_BUILDING_DLL")

View File

@ -45,10 +45,6 @@ class kdl_parserRecipe(ConanFile):
self.options.rm_safe("fPIC") self.options.rm_safe("fPIC")
def configure(self): def configure(self):
if self.settings.os == "Windows" and not self.options.shared:
raise ConanInvalidConfiguration(
"Static libraries are not supported on Windows. Please set option 'shared=True'."
)
if self.options.shared: if self.options.shared:
self.options.rm_safe("fPIC") self.options.rm_safe("fPIC")
@ -59,6 +55,8 @@ class kdl_parserRecipe(ConanFile):
deps = CMakeDeps(self) deps = CMakeDeps(self)
deps.generate() deps.generate()
tc = CMakeToolchain(self) tc = CMakeToolchain(self)
if(not self.options.shared):
tc.preprocessor_definitions["KDL_PARSER_STATIC"] = ""
tc.generate() tc.generate()
def build(self): def build(self):
@ -75,3 +73,5 @@ class kdl_parserRecipe(ConanFile):
def package_info(self): def package_info(self):
self.cpp_info.libs = ["kdl_parser"] self.cpp_info.libs = ["kdl_parser"]
if not self.options.shared:
self.cpp_info.defines = ["KDL_PARSER_STATIC"]

View File

@ -46,6 +46,13 @@
// https://gcc.gnu.org/wiki/Visibility // https://gcc.gnu.org/wiki/Visibility
#if defined _WIN32 || defined __CYGWIN__ #if defined _WIN32 || defined __CYGWIN__
#ifdef KDL_PARSER_STATIC
#define KDL_PARSER_EXPORT
#define KDL_PARSER_IMPORT
#define KDL_PARSER_PUBLIC
#define KDL_PARSER_LOCAL
#define KDL_PARSER_DEPRECATED(msg) __declspec(deprecated(msg))
#else
#ifdef __GNUC__ #ifdef __GNUC__
#define KDL_PARSER_EXPORT __attribute__ ((dllexport)) #define KDL_PARSER_EXPORT __attribute__ ((dllexport))
#define KDL_PARSER_IMPORT __attribute__ ((dllimport)) #define KDL_PARSER_IMPORT __attribute__ ((dllimport))
@ -62,6 +69,7 @@
#endif #endif
#define KDL_PARSER_PUBLIC_TYPE KDL_PARSER_PUBLIC #define KDL_PARSER_PUBLIC_TYPE KDL_PARSER_PUBLIC
#define KDL_PARSER_LOCAL #define KDL_PARSER_LOCAL
#endif
#else #else
#define KDL_PARSER_EXPORT __attribute__ ((visibility("default"))) #define KDL_PARSER_EXPORT __attribute__ ((visibility("default")))
#define KDL_PARSER_IMPORT #define KDL_PARSER_IMPORT