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定义的共享库不会在"选择启动项"下显示为目标,这使我在目标的.cpp文件之一中时无法使用 F7 进行编译。

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

有人遇到类似的问题吗?

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

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

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

最新更新