cmake
संकलन सुविधाओं और C / C ++ मानक चयन
खोज…
वाक्य - विन्यास
- target_compile_features (लक्ष्य निजी | पब्लिक | इंटरफ़ेस feature1 [feature2 ...])
संकलित सुविधा आवश्यकताएँ
आवश्यक संकलक सुविधाओं को एक लक्ष्य पर प्रयोग करके निर्दिष्ट किया जा सकता है कमांड target_compile_features :
add_library(foo
foo.cpp
)
target_compile_features(foo
PRIVATE # scope of the feature
cxx_constexpr # list of features
)
विशेषताएं CMAKE_C_COMPILE_FEATURES या CMAKE_CXX_COMPILE_FEATURES का हिस्सा होनी चाहिए; cmake अन्यथा एक त्रुटि की रिपोर्ट करता है। Cmake लक्ष्य के संकलन विकल्पों में -std=gnu++11
जैसे किसी भी आवश्यक झंडे को जोड़ देगा।
उदाहरण में, सुविधाओं को PRIVATE
घोषित किया गया है: आवश्यकताओं को लक्ष्य में जोड़ा जाएगा, लेकिन इसके उपभोक्ताओं को नहीं। स्वचालित रूप से foo के खिलाफ एक लक्ष्य निर्माण के लिए आवश्यकताओं को जोड़ने के लिए, PUBLIC
या INTERFACE
के बजाय इस्तेमाल किया जाना चाहिए PRIVATE
:
target_compile_features(foo
PUBLIC # this time, required as public
cxx_constexpr
)
add_executable(bar
main.cpp
)
target_link_libraries(bar
foo # foo's public requirements and compile flags are added to bar
)
सी / सी ++ संस्करण चयन
C और C ++ के लिए वांटेड संस्करण क्रमशः CMAKE_C_STANDARD
(स्वीकृत मान 98, 99 और 11 हैं) और CMAKE_CXX_STANDARD
का उपयोग करके निर्दिष्ट किया जा सकता है (स्वीकृत मान 98, 11 और 14 हैं:
set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 11)
ये लक्ष्य पर आवश्यक संकलन विकल्प जोड़ देंगे (उदाहरण के लिए -std=c++11
gcc के लिए)।
संस्करण को क्रमशः चर CMAKE_C_STANDARD_REQUIRED
और CMAKE_CXX_STANDARD_REQUIRED
ON
सेट करके एक आवश्यकता बनाई जा सकती है।
लक्ष्य निर्माण से पहले चरों को सेट किया जाना चाहिए। संस्करण को प्रति-लक्ष्य भी निर्दिष्ट किया जा सकता है:
set_target_properties(foo PROPERTIES
CXX_STANDARD 11
CXX_STANDARD_REQUIRED ON
)