浏览代码

Test per-config OUTPUT_DIRECTORY properties

We test (ARCHIVE|LIBRARY|RUNTIME)_OUTPUT_DIRECTORY_<CONFIG> properties
by building COnly as a subdirectory and setting the properties to put
its files in specific locations.  We build an executable that verifies
the targets actually appear where expected.
Brad King 16 年之前
父节点
当前提交
28c3d59ed9
共有 4 个文件被更改,包括 88 次插入0 次删除
  1. 1 0
      Tests/CMakeLists.txt
  2. 35 0
      Tests/OutDir/CMakeLists.txt
  3. 24 0
      Tests/OutDir/OutDir.c
  4. 28 0
      Tests/OutDir/OutDir.cmake

+ 1 - 0
Tests/CMakeLists.txt

@@ -117,6 +117,7 @@ IF(BUILD_TESTING)
   ADD_TEST_MACRO(COnly COnly)
   ADD_TEST_MACRO(COnly COnly)
   ADD_TEST_MACRO(CxxOnly CxxOnly)
   ADD_TEST_MACRO(CxxOnly CxxOnly)
   ADD_TEST_MACRO(IPO COnly/COnly)
   ADD_TEST_MACRO(IPO COnly/COnly)
+  ADD_TEST_MACRO(OutDir runtime/OutDir)
   ADD_TEST_MACRO(NewlineArgs NewlineArgs)
   ADD_TEST_MACRO(NewlineArgs NewlineArgs)
   ADD_TEST_MACRO(SetLang SetLang)
   ADD_TEST_MACRO(SetLang SetLang)
   ADD_TEST_MACRO(ExternalOBJ ExternalOBJ)
   ADD_TEST_MACRO(ExternalOBJ ExternalOBJ)

+ 35 - 0
Tests/OutDir/CMakeLists.txt

@@ -0,0 +1,35 @@
+cmake_minimum_required(VERSION 2.8)
+project(OutDir C)
+
+if(CMAKE_CONFIGURATION_TYPES)
+  foreach(config ${CMAKE_CONFIGURATION_TYPES})
+    string(TOUPPER "${config}" CONFIG)
+    list(APPEND configs "${CONFIG}")
+  endforeach()
+  set(CMAKE_BUILD_TYPE)
+elseif(NOT CMAKE_BUILD_TYPE)
+  set(CMAKE_BUILD_TYPE Debug)
+endif()
+
+if(CMAKE_BUILD_TYPE)
+  string(TOUPPER "${CMAKE_BUILD_TYPE}" configs)
+endif()
+
+set(top "${OutDir_BINARY_DIR}")
+foreach(config ${configs})
+  foreach(type archive runtime library)
+    string(TOUPPER "${type}" TYPE)
+    set(CMAKE_${TYPE}_OUTPUT_DIRECTORY_${config} "${top}/${type}")
+    file(REMOVE_RECURSE "${top}/${type}")
+  endforeach()
+endforeach()
+
+add_subdirectory(../COnly COnly)
+
+add_custom_command(
+  OUTPUT OutDir.h
+  COMMAND ${CMAKE_COMMAND} -Dtop=${top} -P ${OutDir_SOURCE_DIR}/OutDir.cmake
+  DEPENDS COnly ${OutDir_SOURCE_DIR}/OutDir.cmake
+  )
+include_directories(${top})
+add_executable(OutDir OutDir.c OutDir.h)

+ 24 - 0
Tests/OutDir/OutDir.c

@@ -0,0 +1,24 @@
+#include <OutDir.h>
+#include <stdio.h>
+
+int main(void)
+{
+  const char* files[] = {TESTC1_LIB, TESTC2_LIB, CONLY_EXE, 0};
+  int result = 0;
+  const char** fname = files;
+  for(;*fname;++fname)
+    {
+    FILE* f = fopen(*fname, "rb");
+    if(f)
+      {
+      printf("found: [%s]\n", *fname);
+      fclose(f);
+      }
+    else
+      {
+      printf("error: [%s]\n", *fname);
+      result = 1;
+      }
+    }
+  return result;
+}

+ 28 - 0
Tests/OutDir/OutDir.cmake

@@ -0,0 +1,28 @@
+set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
+set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".a" ".so" ".dylib")
+
+find_library(TESTC1_LIB
+  NAMES testc1 testc1_test_debug_postfix
+  PATHS ${top}/archive
+  NO_DEFAULT_PATH)
+
+find_library(TESTC2_LIB
+  NAMES testc2 testc2_test_debug_postfix
+  PATHS ${top}/archive ${top}/library
+  NO_DEFAULT_PATH)
+
+find_program(CONLY_EXE
+  NAMES COnly
+  PATHS ${top}/runtime
+  NO_DEFAULT_PATH)
+
+file(WRITE ${top}/OutDir.h "/* Generated by ${CMAKE_CURRENT_LIST_FILE} */
+#ifndef OutDir_h
+#define OutDir_h
+
+#define TESTC1_LIB \"${TESTC1_LIB}\"
+#define TESTC2_LIB \"${TESTC2_LIB}\"
+#define CONLY_EXE  \"${CONLY_EXE}\"
+
+#endif
+")