我使用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解决方案中设置为额外的包含目录。
最好的问候, Hellhound
CMakeLists.txt
文件中添加了include_directories(/path/to/include)
,它们仍然没有设置吗?您是在声明目标之前添加include_directories
吗?(顺序很重要)。如果是这样,您可以发布部分或全部包含问题的CMakeLists.txt
文件吗?请注意,CMAKE_INCLUDE_PATH
变量与编译器使用的包含路径无关,并且没有名为INCLUDE_DIRECTORY
的变量或命令。 - Adam Bowenadd_executable(test test.cpp)
并生成一个VS2010项目(这是我们拥有的版本),然后右键单击“test”项目,选择属性,然后转到C/C++-->常规,那么包含目录将列在“附加包含目录”属性下。如果您的项目不是这种情况,则必须在您发布的代码之外存在某些问题。 - Adam Bowen