Make sure INTERFACE properties work with OBJECT libraries.
This commit is contained in:
parent
510fdcb188
commit
faa927e273
|
@ -4781,6 +4781,10 @@ bool isLinkDependentProperty(cmTarget *tgt, const std::string &p,
|
||||||
bool cmTarget::IsLinkInterfaceDependentBoolProperty(const std::string &p,
|
bool cmTarget::IsLinkInterfaceDependentBoolProperty(const std::string &p,
|
||||||
const char *config)
|
const char *config)
|
||||||
{
|
{
|
||||||
|
if (this->TargetTypeValue == OBJECT_LIBRARY)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return (p == "POSITION_INDEPENDENT_CODE") ||
|
return (p == "POSITION_INDEPENDENT_CODE") ||
|
||||||
isLinkDependentProperty(this, p, "COMPATIBLE_INTERFACE_BOOL",
|
isLinkDependentProperty(this, p, "COMPATIBLE_INTERFACE_BOOL",
|
||||||
config);
|
config);
|
||||||
|
@ -4790,6 +4794,10 @@ bool cmTarget::IsLinkInterfaceDependentBoolProperty(const std::string &p,
|
||||||
bool cmTarget::IsLinkInterfaceDependentStringProperty(const std::string &p,
|
bool cmTarget::IsLinkInterfaceDependentStringProperty(const std::string &p,
|
||||||
const char *config)
|
const char *config)
|
||||||
{
|
{
|
||||||
|
if (this->TargetTypeValue == OBJECT_LIBRARY)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return isLinkDependentProperty(this, p, "COMPATIBLE_INTERFACE_STRING",
|
return isLinkDependentProperty(this, p, "COMPATIBLE_INTERFACE_STRING",
|
||||||
config);
|
config);
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,11 @@ if(CMAKE_SHARED_LIBRARY_C_FLAGS AND NOT WATCOM)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS} ${CMAKE_C_FLAGS}")
|
set(CMAKE_C_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS} ${CMAKE_C_FLAGS}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_definitions(-DB_DEF)
|
|
||||||
add_library(B OBJECT b1.c b2.c)
|
add_library(B OBJECT b1.c b2.c)
|
||||||
|
target_include_directories(B PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
target_compile_definitions(B PUBLIC B_DEF)
|
||||||
|
|
||||||
add_library(Bexport OBJECT b1${vs6}.c b2${vs6}.c)
|
add_library(Bexport OBJECT b1${vs6}.c b2${vs6}.c)
|
||||||
set_property(TARGET Bexport PROPERTY COMPILE_DEFINITIONS Bexport)
|
set_property(TARGET Bexport PROPERTY COMPILE_DEFINITIONS Bexport)
|
||||||
|
target_include_directories(Bexport PRIVATE $<TARGET_PROPERTY:B,INTERFACE_INCLUDE_DIRECTORIES>)
|
||||||
|
target_compile_definitions(Bexport PRIVATE $<TARGET_PROPERTY:B,INTERFACE_COMPILE_DEFINITIONS>)
|
||||||
|
|
|
@ -4,8 +4,15 @@
|
||||||
#ifndef B_DEF
|
#ifndef B_DEF
|
||||||
# error "B_DEF not defined"
|
# error "B_DEF not defined"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(_WIN32) && defined(Bexport)
|
#if defined(_WIN32) && defined(Bexport)
|
||||||
# define EXPORT_B __declspec(dllexport)
|
# define EXPORT_B __declspec(dllexport)
|
||||||
#else
|
#else
|
||||||
# define EXPORT_B
|
# define EXPORT_B
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(_WIN32) && defined(SHARED_B)
|
||||||
|
# define IMPORT_B __declspec(dllimport)
|
||||||
|
#else
|
||||||
|
# define IMPORT_B
|
||||||
|
#endif
|
||||||
|
|
|
@ -26,6 +26,9 @@ endif()
|
||||||
|
|
||||||
# Test static library without its own sources.
|
# Test static library without its own sources.
|
||||||
add_library(ABstatic STATIC ${dummy} $<TARGET_OBJECTS:A> $<TARGET_OBJECTS:B>)
|
add_library(ABstatic STATIC ${dummy} $<TARGET_OBJECTS:A> $<TARGET_OBJECTS:B>)
|
||||||
|
target_include_directories(ABstatic PUBLIC $<TARGET_PROPERTY:B,INTERFACE_INCLUDE_DIRECTORIES>)
|
||||||
|
target_compile_definitions(ABstatic PUBLIC $<TARGET_PROPERTY:B,INTERFACE_COMPILE_DEFINITIONS>)
|
||||||
|
|
||||||
add_executable(UseABstatic mainAB.c)
|
add_executable(UseABstatic mainAB.c)
|
||||||
target_link_libraries(UseABstatic ABstatic)
|
target_link_libraries(UseABstatic ABstatic)
|
||||||
|
|
||||||
|
@ -41,12 +44,17 @@ endif()
|
||||||
|
|
||||||
# Test shared library without its own sources.
|
# Test shared library without its own sources.
|
||||||
add_library(ABshared SHARED ${dummy} ${ABshared_SRCS})
|
add_library(ABshared SHARED ${dummy} ${ABshared_SRCS})
|
||||||
|
target_include_directories(ABshared PUBLIC $<TARGET_PROPERTY:B,INTERFACE_INCLUDE_DIRECTORIES>)
|
||||||
|
target_compile_definitions(ABshared PUBLIC $<TARGET_PROPERTY:B,INTERFACE_COMPILE_DEFINITIONS>)
|
||||||
|
|
||||||
add_executable(UseABshared mainAB.c)
|
add_executable(UseABshared mainAB.c)
|
||||||
set_property(TARGET UseABshared PROPERTY COMPILE_DEFINITIONS SHARED_B ${NO_A})
|
set_property(TARGET UseABshared PROPERTY COMPILE_DEFINITIONS SHARED_B ${NO_A})
|
||||||
target_link_libraries(UseABshared ABshared)
|
target_link_libraries(UseABshared ABshared)
|
||||||
|
|
||||||
# Test executable without its own sources.
|
# Test executable without its own sources.
|
||||||
add_library(ABmain OBJECT mainAB.c)
|
add_library(ABmain OBJECT mainAB.c)
|
||||||
|
target_include_directories(ABmain PUBLIC $<TARGET_PROPERTY:B,INTERFACE_INCLUDE_DIRECTORIES>)
|
||||||
|
target_compile_definitions(ABmain PUBLIC $<TARGET_PROPERTY:B,INTERFACE_COMPILE_DEFINITIONS>)
|
||||||
add_executable(UseABinternal ${dummy}
|
add_executable(UseABinternal ${dummy}
|
||||||
$<TARGET_OBJECTS:ABmain> $<TARGET_OBJECTS:A> $<TARGET_OBJECTS:B>
|
$<TARGET_OBJECTS:ABmain> $<TARGET_OBJECTS:A> $<TARGET_OBJECTS:B>
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
#if defined(_WIN32) && defined(SHARED_B)
|
|
||||||
# define IMPORT_B __declspec(dllimport)
|
#include "b.h"
|
||||||
#else
|
|
||||||
# define IMPORT_B
|
|
||||||
#endif
|
|
||||||
extern IMPORT_B int b1(void);
|
extern IMPORT_B int b1(void);
|
||||||
extern IMPORT_B int b2(void);
|
extern IMPORT_B int b2(void);
|
||||||
#ifndef NO_A
|
#ifndef NO_A
|
||||||
|
|
Loading…
Reference in New Issue