ENH: Test fake circular dependency case
A recent change fixed a case in which CMake incorrectly diagnosed a circular dependency involving a non-linkable executable target. This adds a test for that case.
This commit is contained in:
parent
b8fc8b324d
commit
c76f3ae5b5
|
@ -52,3 +52,4 @@ ADD_SUBDIRECTORY(Exec4)
|
|||
ADD_SUBDIRECTORY(Case1)
|
||||
ADD_SUBDIRECTORY(Case2)
|
||||
ADD_SUBDIRECTORY(Case3)
|
||||
ADD_SUBDIRECTORY(Case4)
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
project(CASE4 C)
|
||||
|
||||
IF(CMAKE_ANSI_CFLAGS)
|
||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_ANSI_CFLAGS}")
|
||||
ENDIF(CMAKE_ANSI_CFLAGS)
|
||||
|
||||
# This is not really a circular dependency. "case4Bar" refers to a
|
||||
# third-party library that happens to match the executable name, which
|
||||
# is okay when the executable is not a linkable target (ENABLE_EXPORTS
|
||||
# is not set). This tests whether CMake avoids incorrectly reporting
|
||||
# a circular dependency. In practice case4Foo may be a shared
|
||||
# library, but we skip that here because we do not want it to actually
|
||||
# have to find the third-party library.
|
||||
add_library(case4Foo STATIC foo.c)
|
||||
target_link_libraries(case4Foo case4Bar)
|
||||
|
||||
# The executable avoids linking to a library with its own name, which
|
||||
# has been a CMake-ism for a long time, so we will not get a link
|
||||
# failure. An imported target or executable with an OUTPUT_NAME set
|
||||
# may be used if the user really wants to link a third-party library
|
||||
# into an executable of the same name.
|
||||
add_executable(case4Bar bar.c)
|
||||
target_link_libraries(case4Bar case4Foo)
|
|
@ -0,0 +1,2 @@
|
|||
extern int foo();
|
||||
int main() { return foo(); }
|
|
@ -0,0 +1 @@
|
|||
int foo() { return 0; }
|
Loading…
Reference in New Issue