c++ - CMake 库目标并不总是出现在 Visual Studio 2017 的启动项下拉列表中

标签 c++ visual-studio cmake visual-studio-2017

我目前正在开发一个 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)

projectaprojectbprojectc 子目录包含简单的 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 定义的共享库没有作为目标出现在“选择启动项”下,这使我无法在目标之一中使用 F7 进行编译。 .cpp 文件。

  • 在“选择启动项”下选择“当前文档”无效 - F7 或 Ctrl-Shift-B 不起作用。我不确定提供此功能的规则是什么。
  • 我以前见过这样的 DLL,但我无法确定我的其他 CMakeLists.txt 文件中有什么不同(我不再有它们了)
  • 如果我使用 add_subdirectory 包含第三方库的 CMakeLists.txt,它的 .exe 目标会出现在“选择启动项”下,我可以对它们使用 F7。
  • 如果我右键单击顶级 CMakeLists.txt 文件,我可以在“构建”下看到所有 DLL、LIB 和 EXE 目标。这就是我现在编译的方式,但它不像混合 F7 那样令人满意;)

有人遇到过类似的问题吗?

最佳答案

看来我的环境/缓存可能已损坏。我删除了项目目录中自动生成的 .vs 文件夹,然后使用重新打开项目 devenv .,和以前一样。

我现在可以使用 F7 构建任何 cpp 文件。仍然无法在“选择启动项”下看到任何 DLL 目标,但这已经足够了。

编辑:或者,CMake/Cache/Generate/CMakeLists.txt 似乎也有帮助。

关于c++ - CMake 库目标并不总是出现在 Visual Studio 2017 的启动项下拉列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45883434/

相关文章:

C++ MP3、WAV 和 AAC(低级)解码器?

c++ - Visual Studio 字符集 'Not set' 与 'Multi byte character set'

CMake 在 add_library 的链接阶段末尾添加 -ldl

c++ - 使用唯一指针向树添加节点

c++ - 为什么将此 POD 结构用作基类会很危险?

database - 将列表列表保存到文件的最有效方法?

c++ - 在 Eclipse 中使用定制的 makefile

cmake - 将外部源目录添加到 CMake 构建

c++ - 按升序存储列表中的元素

C# List<string> 只打印最后一个元素