2017-08-04 5 views
0

cmakeでカスタム#defineを定義しようとしていますが、何らかの理由でVSが定義されたマクロとして認識しますが、定義されているかどうかを確認すると、#ifdefは機能しません。VS 2017 CMakeがマクロを認識しない

例:

CMakeLists.txt

CMakeLists.txt更新
cmake_minimum_required(VERSION 3.7) 
project(StormEngine VERSION "0.0.0") 

set(CMAKE_CXX_STANDARD 17) 

if (WIN32) 
    add_definitions(-DWIN32_BUILD) 
elseif(WIN64) 
    add_definitions(-DWIN64_BUILD) 
endif() 

if (WIN32 OR WIN64) 
    add_definitions(-DWIN_BUILD) 
endif() 

set(SOURCE_FILES main.cpp) 
add_executable(StormEngine ${SOURCE_FILES}) 

注:問題はまだ変更は以下の見た後もpresists。

cmake_minimum_required(VERSION 3.7) 
project(StormEngine VERSION "0.0.0") 

set(CMAKE_CXX_STANDARD 17) 

if (WIN32) 
    add_definitions(-DWIN32_BUILD) 
    add_definitions(-DWIN_BUILD) 
endif() 

set(SOURCE_FILES main.cpp) 
add_executable(StormEngine ${SOURCE_FILES}) 

main.cppに

#include <iostream> 
int main() 
{ 
    std::cout << "main called..." << std::endl; 
#ifdef WIN_BUILD 
    std::cout << "Window Build" << std::endl; 
#endif 
    return 0; 
} 

出力は次のようになります。

main called... 
Window Build 

実際の出力:

main called... 
+1

私の悪いことだった 'Window Build' – Mukul215

+0

の後に' ''が不足しているようです。実際のコードにはありません。コピー/ペーストの代わりに例を打ち出しました。 – Matthew

+0

@ Someprogrammerdude私はちょうどチュートリアルに従ったhttps://blogs.msdn.microsoft.com/vcblog/2016/10/05/cmake-support-in-visual-studio/ – Matthew

答えて

0

あなたは、例えば読めばthis reference about CMake variables that describe the systemには、WIN64またはWINの変数はありません。

WIN32を使用してWindows(32ビットと64ビットの両方)を検出します。

+0

これは正しいです。私が最近コメントに述べたように、これは単なるテストであったため、コードを変更しました。 VSが 'WIN_BUILD'がマクロであると認識しているのに、'#ifdef'を正しく更新しないところでは、まだ問題は残っています – Matthew

+2

組み込みマクロ '_WIN32'と' _WIN64'を使って何が問題になっていますか?これらはCLによって自動的に定義されます。 – rustyx

関連する問題