CMake 库目标并不总是出现在 Visual Studio 2017 的启动项下拉列表中
Posted
技术标签:
【中文标题】CMake 库目标并不总是出现在 Visual Studio 2017 的启动项下拉列表中【英文标题】:CMake library targets don't always appear in Visual Studio 2017's Startup Item dropdown 【发布时间】:2017-08-25 14:15:56 【问题描述】:我目前正在开发一个 CMake C++ 项目,使用 Visual Studios 对 CMake 的全新内置支持: https://blogs.msdn.microsoft.com/vcblog/2016/10/05/cmake-support-in-visual-studio/
我的“根”CMakeLists.txt 文件设置了一些变量,然后包含了一些子目录:
project("MyProject")
cmake_minimum_required(VERSION 3.4.3)
set (CMAKE_CXX_STANDARD 14)
include_directories(projecta/include)
include_directories(projectb/include)
include_directories(projectc/include)
# Dump the DEBUG and RELEASE outputs next to the program
# that will use the DLL
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "$CMAKE_CURRENT_LIST_DIR/../lib")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "$CMAKE_CURRENT_LIST_DIR/../lib")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "$CMAKE_CURRENT_LIST_DIR/../dll")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "$CMAKE_CURRENT_LIST_DIR/../lib")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "$CMAKE_CURRENT_LIST_DIR/../lib")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "$CMAKE_CURRENT_LIST_DIR/../dll")
add_subdirectory(projecta)
add_subdirectory(projectb)
add_subdirectory(projectc)
projecta
、projectb
和 projectc
子目录包含简单的 CMakeLists.txt 文件,如下所示:
set(LIB_NAME "projectc")
set(LIB_DEPENDENCIES "projecta" "projectb")
include_directories(include)
FILE(GLOB_RECURSE SOURCE_CPP_FILES "src/*.cpp")
FILE(GLOB_RECURSE SOURCE_C_FILES "src/*.c")
FILE(GLOB_RECURSE HEADER_FILES "include/"$LIB_NAME"/*.h")
add_library($LIB_NAME $PLT_LIBRARY_MODE $SOURCE_CPP_FILES $SOURCE_C_FILES $HEADER_FILES)
target_link_libraries($LIB_NAME $LIB_DEPENDENCIES)
我从开发者控制台打开项目:
devenv <the directory containing the top CMakeLists.txt file>
我的问题:add_libraries
定义的共享库不会在“选择启动项”下显示为目标,这会阻止我在目标的 .cpp 文件之一中使用 F7 进行编译。
add_subdirectory
包含第三方库的 CMakeLists.txt
,其 .exe 目标将出现在“选择启动项”下,我可以对其使用 F7。
如果我右键单击顶层 CMakeLists.txt 文件,我可以看到“Build”下的所有 DLL、LIB 和 EXE 目标。这就是我现在的编译方式,但它不像捣碎 F7 那样令人满意;)
有人遇到过类似的问题吗?
【问题讨论】:
【参考方案1】:看来我的环境/缓存可能已损坏。我删除了项目目录中自动生成的 .vs 文件夹并使用
devenv .
,和以前一样。
我现在可以使用 F7 构建任何 cpp 文件。在 Select Startup Item 下仍然看不到任何 DLL 目标,但现在已经足够了。
编辑:或者,CMake/Cache/Generate/CMakeLists.txt 似乎也有帮助。
【讨论】:
并确保升级到 15.3 并包含更多与 CMake 相关的修复。 谢谢 - 这改变了很多行为。仍然希望我可以为 dll 目标定义一个默认构建(这样我就可以从任何地方混合 F7),但仍然没有成功。以上是关于CMake 库目标并不总是出现在 Visual Studio 2017 的启动项下拉列表中的主要内容,如果未能解决你的问题,请参考以下文章
为啥 JavaScript Intellisense 在 Visual Studio 2012 中并不总是有效?