我可以从上面的文件夹添加一个库吗?

时间:2019-01-25 08:36:51

标签: cmake

我无法将静态库添加到项目中。

我具有以下项目结构:

+ root/
  + CmakeLists.txt // Include all projects
  + Base/
  | + foo.cpp
  | + CmakeLists.txt
  + App1/
  | + app1.cpp
  | + CmakeLists.txt // Requires Base lib
  + App2/
  | + app2.cpp
  | + CmakeLists.txt // Requires Base lib

我尝试通过以下方式进行操作:

Base CmakeLists.txt:

cmake_minimum_required(VERSION 3.10.2)

add_library(Base STATIC foo.cpp)

App1 CmakeLists.txt:

cmake_minimum_required(VERSION 3.10.2)

project(App1)
add_executable(${CMAKE_PROJECT_NAME} app1.cpp)

include(../Base/CMakeLists.txt)

但是我有以下错误:

CMake Error at C:/DPA/Base/CMakeLists.txt:3 (add_library):
  Cannot find source file:

    foo.cpp

如何正确设置库以包含在所有项目中?

1 个答案:

答案 0 :(得分:2)

这不是您使用这种目录结构的方式。相反,在>>> import pandas as pd >>> d = {'col1': [1, 2], 'col2': [3, 4]} >>> df = pd.DataFrame(data=d) >>> print(df) col1 col2 0 1 3 1 2 4 >>> df['sum'] = df.col1 + df.col2 >>> print(df) col1 col2 sum 0 1 3 4 1 2 4 6 中,使用

App1/CmakeLists.txt

这声明add_executable(App1 app1.cpp) target_link_libraries(App1 Base) 依赖于App1并应与该库链接。 “链接”意味着在构建Base源时,不仅将正确的参数传递给链接器,还将传播包含标志和其他选项传播给编译器。

如果您打算仅构建项目的一部分,则可以在App1中使用附加参数,即

add_executable

这样,当您构建默认目标时,add_executable(App1 EXCLUDE_FROM_ALL app1.cpp) 将不会成为构建的一部分。您仍然可以手动/根据要求构建它,例如使用makefile时,

App1

将构建可执行文件make App1 及其所需的一切。