【发布时间】:2020-04-06 16:47:30
【问题描述】:
我是 CMake 的新手。我正在尝试创建 C++ 源文件列表,并使用这些源文件构建可执行文件。为了避免一次通过一个级别的列表,我使用了一个环境变量。但是,并非所有列出的源都添加到 env var,只有第一个。
这是我所拥有的:
目录结构:
<root>
├─ build
│ ├─ <snip>
├─ src
│ ├─ something
│ │ ├─ CMakeLists.txt
│ │ ├─ a.cpp
│ │ ├─ a.h
│ │ ├─ b.cpp
│ │ └─ b.h
│ ├─ CMakeLists.txt
│ └─ main.cpp
├─ CMakeLists.txt
根目录/CMakeLists.txt:
cmake_minimum_required(VERSION 3.10.0 FATAL_ERROR)
project(samplecpp VERSION "0.1.0" LANGUAGES CXX)
# ---- SOURCES ----
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
set(ENV{MY_SOURCES} "")
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src)
message(STATUS "MY_SOURCES = " $ENV{MY_SOURCES})
# ---- EXECUTABLE ----
add_executable(samplecpp ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp $ENV{MY_SOURCES})
root/src/CMakeLists.txt:
add_subdirectory(something)
root/src/something/CMakeLists.txt:
set(
ENV{MY_SOURCES}
$ENV{MY_SOURCES}
${CMAKE_CURRENT_SOURCE_DIR}/a.cpp
${CMAKE_CURRENT_SOURCE_DIR}/b.cpp
)
运行 cmake 应该打印消息 MY_SOURCES = root/src/something/a.cpproot/src/something/b.cpp,但我只得到 MY_SOURCES = root/src/something/a.cpp。因此,cmake --build 失败并出现以下错误:
<root>/src/main.cpp:11: undefined reference to `B::do_b()'
我做错了什么?
【问题讨论】: