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:
@@ -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}")
|
||||
|
25
Tests/Module/WriteCompilerDetectionHeader/compile_tests.h
Normal file
25
Tests/Module/WriteCompilerDetectionHeader/compile_tests.h
Normal 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
|
@@ -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()
|
||||
{
|
||||
|
10
Tests/Module/WriteCompilerDetectionHeader/multi_files.cpp
Normal file
10
Tests/Module/WriteCompilerDetectionHeader/multi_files.cpp
Normal file
@@ -0,0 +1,10 @@
|
||||
|
||||
#include "multi_file_compiler_detection.h"
|
||||
|
||||
#define PREFIX MULTI
|
||||
#include "compile_tests.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user