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:
parent
74c59a748d
commit
28c3d59ed9
|
@ -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)
|
||||||
|
|
|
@ -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)
|
|
@ -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;
|
||||||
|
}
|
|
@ -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
|
||||||
|
")
|
Loading…
Reference in New Issue