2017-08-04 106 views
0

我想在cmake中定義幾個自定義#define,但由於某些原因,VS將它們識別爲已定義的宏,但檢查是否已定義#ifdef不起作用。VS 2017 CMake不識別宏

例子:

的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}) 

更新的CMakeLists.txt

注:問題仍然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,沒有WIN64WIN變量。使用WIN32檢測Windows(32位和64位)。

+0

這是正確的。正如我最近在評論中所說的那樣,這只是一個測試,而我自此改變了代碼。 VS認識到'WIN_BUILD'是一個宏,但沒有正確更新'#ifdef'的問題仍然存在 – Matthew

+2

使用內建宏_WIN32和_WIN64有什麼問題?這些由CL自動定義。 – rustyx