1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-19 11:18:40 +08:00

WCDH: Make it possible to generate multiple files.

Extend the write_compiler_detection_header interface to allow
specifying a location for supplementary files, and getting the
list of resulting files as a variable.
This commit is contained in:
Stephen Kelly
2014-10-31 00:41:53 +01:00
parent 2ed0088b2a
commit 4cf5179c77
15 changed files with 212 additions and 27 deletions

View File

@@ -67,6 +67,22 @@ add_executable(WriteCompilerDetectionHeader main.cpp)
set_property(TARGET WriteCompilerDetectionHeader PROPERTY CXX_STANDARD 98)
set_defines(WriteCompilerDetectionHeader "${true_defs}" "${false_defs}")
write_compiler_detection_header(
FILE "${CMAKE_CURRENT_BINARY_DIR}/compiler_multi_files/multi_file_compiler_detection.h"
PREFIX MULTI
OUTPUT_FILES_VAR multi_files
OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/compiler_multi_files/compiler_support"
COMPILERS GNU Clang
VERSION 3.1
FEATURES
${cxx_known_features} ${c_known_features}
)
add_executable(multi_files multi_files.cpp)
set_property(TARGET multi_files PROPERTY CXX_STANDARD 98)
target_include_directories(multi_files PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/compiler_multi_files)
set_defines(multi_files "${true_defs}" "${false_defs}")
if(MSVC)
return() # MSVC has only one mode.
endif()
@@ -86,3 +102,8 @@ endif()
add_executable(WriteCompilerDetectionHeader_11 main.cpp)
set_property(TARGET WriteCompilerDetectionHeader_11 PROPERTY CXX_STANDARD 11)
set_defines(WriteCompilerDetectionHeader_11 "${true_defs}" "${false_defs}")
add_executable(multi_files_11 multi_files.cpp)
set_property(TARGET multi_files_11 PROPERTY CXX_STANDARD 11)
target_include_directories(multi_files_11 PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/compiler_multi_files)
set_defines(multi_files_11 "${true_defs}" "${false_defs}")

View File

@@ -0,0 +1,25 @@
#define JOIN_IMPL(A, B) A ## B
#define JOIN(A, B) JOIN_IMPL(A, B)
#define CHECK(FEATURE) (JOIN(PREFIX, JOIN(_COMPILER_, FEATURE)) == JOIN(EXPECTED_COMPILER_, FEATURE))
#if !CHECK(CXX_DELEGATING_CONSTRUCTORS)
#error cxx_delegating_constructors expected availability did not match.
#endif
#if !CHECK(CXX_VARIADIC_TEMPLATES)
#error cxx_variadic_templates expected availability did not match.
#endif
#if !CHECK(VERSION_MAJOR)
#error Compiler major version did not match.
#endif
#if !CHECK(VERSION_MINOR)
#error Compiler minor version did not match.
#endif
#if !CHECK(VERSION_PATCH)
#error Compiler patch version did not match.
#endif

View File

@@ -1,29 +1,8 @@
#include "test_compiler_detection.h"
#define JOIN_IMPL(A, B) A ## B
#define JOIN(A, B) JOIN_IMPL(A, B)
#define CHECK(FEATURE) (JOIN(TEST_COMPILER_, FEATURE) == JOIN(EXPECTED_COMPILER_, FEATURE))
#if !CHECK(CXX_DELEGATING_CONSTRUCTORS)
#error cxx_delegating_constructors expected availability did not match.
#endif
#if !CHECK(CXX_VARIADIC_TEMPLATES)
#error cxx_variadic_templates expected availability did not match.
#endif
#if !CHECK(VERSION_MAJOR)
#error Compiler major version did not match.
#endif
#if !CHECK(VERSION_MINOR)
#error Compiler minor version did not match.
#endif
#if !CHECK(VERSION_PATCH)
#error Compiler patch version did not match.
#endif
#define PREFIX TEST
#include "compile_tests.h"
int main()
{

View File

@@ -0,0 +1,10 @@
#include "multi_file_compiler_detection.h"
#define PREFIX MULTI
#include "compile_tests.h"
int main()
{
return 0;
}