2012-04-03 14 views
8

में एक चर के 2 अलग-अलग मानों के साथ एक प्रोग्राम कैसे बनाया जाए, मैंने हाल ही में Qt प्रोजेक्ट qmake से CMake पर पोर्ट किया है। मेरा मुख्य कार्यक्रम एक मान है जो #define निर्देश पर निर्भर करता है।सीएमके

मैं निर्दिष्ट करना चाहता हूं कि CMake के माध्यम से बाहरी रूप से निर्देश परिभाषित करें और उसी निष्पादन योग्य के 3 अलग-अलग नामित संस्करणों का निर्माण करें।

मुझे यह कैसे करना चाहिए?

मैंने set_target_properties देखा है लेकिन यह केवल पुस्तकालयों के लिए काम करता है, न कि निष्पादन योग्य के लिए।

उदाहरण के लिए मैं चाहता हूँ कि निम्नलिखित कार्यक्रम,

int main() 
{ 

    cout << BUILDTYPE << endl; 
} 

यह 3 अलग जायके (3 निष्पादनयोग्य) BUILDTYPE "define" उदाहरण के लिए मेरी CMakeLists.txt में मैं

add_executable(myAppV1 -DBUILDTYPE=1) 
add_executable(myAppV2 -DBUILDTYPE=2) 
add_executable(myAppV3 -DBUILDTYPE=3) 
निर्दिष्ट करना चाहते हैं के आधार पर संकलित है

लेकिन यह सही वाक्यविन्यास नहीं है। कुछ संकेत? और मुझे 3 निष्पादन योग्य हैं जो

उत्तर

9

क्या आप सुनिश्चित हैं कि set_target_properties काम नहीं करता है? यह कैसे एक के बारे में:

set_target_properties(myAppV1 PROPERTIES COMPILE_FLAGS "-DBUILDTYPE=1") 

या:

set_target_properties(myAppV1 PROPERTIES COMPILE_DEFINITIONS "BUILDTYPE=1") 

मेरी मशीन पर काम करता है:

add_executable(myAppV1 main.cpp) 
add_executable(myAppV2 main.cpp) 
set_target_properties(myAppV1 PROPERTIES COMPILE_DEFINITIONS "BUILDTYPE=1") 
set_target_properties(myAppV2 PROPERTIES COMPILE_DEFINITIONS "BUILDTYPE=2") 
+0

धन्यवाद! मैं add_executable के बाद set_target_properties ले जाने और दूसरे संस्करण आप ने लिखा add_executable (myAppv1 main.cpp) set_target_properties (myAppV1 ​​गुण COMPILE_DEFINITIONS "BUILDTYPE = 1") लेकिन नहीं इस तरह से add_executable (myAppv1 में इसका इस्तेमाल करने के लिए है main.cpp) set_target_properties (myAppV1 ​​गुण COMPILE_DEFINITIONS "-DBUILDTYPE = 1") – linello

0

एक और तरीका हो सकता है:

mkdir two directory 
buildflavor1 
buildflavor2 

पहले उप में निर्देशिका रन:

cmake -DFLAVOR=OPTION1 .. 
इसके दूसरे भाग में

:

run cmake -DFLAVOR=OPTION2 .. 

तो दो के साथ अलग अलग संकलन ध्वज के साथ ही नाम के साथ निष्पादन योग्य खुद सुविधा .o और इतने पर है।