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.
This commit is contained in:
Brad King 2009-10-28 13:35:53 -04:00
parent 74c59a748d
commit 28c3d59ed9
4 changed files with 88 additions and 0 deletions

View File

@ -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)

View File

@ -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
Tests/OutDir/OutDir.c Normal file
View File

@ -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
Tests/OutDir/OutDir.cmake Normal file
View File

@ -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
")