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(Case1)
|
||||||
ADD_SUBDIRECTORY(Case2)
|
ADD_SUBDIRECTORY(Case2)
|
||||||
ADD_SUBDIRECTORY(Case3)
|
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