【问题标题】:How to add CMake includes and libraries to Visual Studio Solution?如何将 CMake 包含和库添加到 Visual Studio 解决方案?
【发布时间】:2012-01-16 11:21:16
【问题描述】:

我使用 CMake 生成 Visual Studio 2010 项目和解决方案文件。其实我可以设置不同的设置, 像警告级别,增量建筑标志等。来自 CMake。但我不能设置额外的包含和库, 列在 VC++ 目录配置选项卡中。实际上我必须手动设置这些目录。这是愚蠢的 又无聊……

我尝试设置以下 CMake 变量:CMAKE_INCLUDE_PATH、INCLUDE_DIRECTORY 但什么也没发生。如果我打开项目,解决方案的附加包含目录始终为空(仅给出标准 MSVE 设置)。

我也很累在创建可执行文件后设置这个变量,但这也没有效果。

这是我直接在 cmake 的标题中所做的 文件:

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(${MODULE_NAME})
IF (MSVC)
   # Activate C++ exception handling
   IF (NOT CMAKE_CXX_FLAGS MATCHES "/EHsc")
   SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc") 
   ENDIF ()

   # Set Warning level always to 4
   IF (CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
     string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
   ELSE ()
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
   ENDIF ()

   #read path of dependency modules  
   file(READ "msvc.deps" MSVC_PROPERTIES)
   STRING(REGEX REPLACE ";" "\\\\;" MSVC_PROPERTIES "${MSVC_PROPERTIES}")
   STRING(REGEX REPLACE "\n" ";" MSVC_PROPERTIES "${MSVC_PROPERTIES}")

   FOREACH(e ${MSVC_PROPERTIES})
     SET(INCLUDE ${INCLUDE} ${e})
     MESSAGE(STATUS "[INFO]: Value ${e}")
   ENDFOREACH(e)
   INCLUDE_DIRECTORIES(${INCLUDE})
ENDIF ()

在我添加到依赖模块路径的 .deps 文件中, 行分隔:

c:\binrev\development\boost\1.47\includes
c:\binrev\repository\modules\brCore\trunk\includes

均已成功读取,但无法设置为附加 在我的 MSVC 解决方案中包含目录。

最好的问候, 地狱犬

【问题讨论】:

    标签: c++ visual-studio-2010 cmake


    【解决方案1】:

    CMake 是 pretty well documented,如果我理解了您的问题,那么我认为您正在寻找的命令是

    虽然有些配置是通过设置变量来完成的,但大部分是使用命令来将某些信息添加到构建的部分中,通过在目标上设置属性来完成的频率略低。

    【讨论】:

    • 我知道 CMake 有据可查,但这个变量不起作用。我设置了这些变量中的任何一个,但是当我打开 MSVC 解决方案时,什么都没有设置。
    • 我还尝试使用 SET(ENV${PATH} "c:\test\...\") 设置 MSVC 环境变量 INCLUDE 和 PATH,但这也没有效果。 MSVC 解决方案的目录为空。
    • 即使将include_directories(/path/to/include) 添加到您的CMakeLists.txt 文件后,它们也没有设置?您是否在声明目标之前添加include_directories? (顺序很重要)。如果是这样,您能否发布部分或全部 CMakeLists.txt 文件来说明问题?请注意,CMAKE_INCLUDE_PATH 变量与编译器使用的包含路径无关,并且没有名为 INCLUDE_DIRECTORY 的变量或命令。
    • 是的,在调用 include_directories(/path/to/include) 之后,MSVC 解决方案的附加包含目录中没有设置任何内容。是的,在我声明目标之前,包含目录设置在顶部。
    • 项目是否仍然编译?不幸的是,我目前无法访问 Visual Studio 进行实验,但我知道我们的构建系统广泛使用了include_directories,并且整个构建过程作为一个 Visual Studio 项目构建得很愉快。可能是 CMake 将设置添加到项目的其他部分。
    【解决方案2】:

    我相信 CMakeLists.txt 中某处的 include_directories ("path") 确实将 path 添加到 C++ 包含路径。

    【讨论】:

    • 设置了那些变量,但什么也没发生。在解决方案中,包含目录为空。我也试过在可执行文件生成后设置这个变量,但是没有效果。
    【解决方案3】:

    是的。虽然它没有出现在“VC++ 目录”选项卡下的“包含目录”中,但它确实出现在 C/C++ -> 常规下的“附加包含目录”中。

    【讨论】:

      猜你喜欢
      • 2017-07-11
      • 2016-05-15
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      • 2015-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多