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(CxxOnly CxxOnly)
|
||||
ADD_TEST_MACRO(IPO COnly/COnly)
|
||||
ADD_TEST_MACRO(OutDir runtime/OutDir)
|
||||
ADD_TEST_MACRO(NewlineArgs NewlineArgs)
|
||||
ADD_TEST_MACRO(SetLang SetLang)
|
||||
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