使用可执行文件构建库

时间:2014-11-04 04:45:39

标签: windows cmake mingw-w64

我有一个库“lib”和一个可执行的“demo”。

我遇到的问题是“demo”无法获取由“lib”设置的lib_INCLUDESlib_LIBS lib变量。我希望他们设置,因为在demo.h我做#include <lib.h>并且找不到包含。我希望CMake将lib.h作为全局包含,即将-I /path/to/the/dir/with/lib.h/传递给编译器。


来源树:

- src/
  - CMakeLists.txt
  - lib/
    - CMakeLists.txt
    - lib.cpp
    - lib.h
  - demo/
    - CMakeLists.txt
    - demo.cpp
    - demo.h

的src /的CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(test)

add_subdirectory(lib)
add_subdirectory(demo)

的src / LIB /的CMakeLists.txt

add_library(lib SHARED lib.h lib.cpp)
target_include_directories(lib ${CMAKE_CURRENT_SOURCE_DIR})

# defined for later use in src/demo/CMakeLists.txt
set(lib_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR})
set(lib_LIBS lib)

的src /演示/的CMakeLists.txt

include_directories(${lib_INCLUDES})
add_executable(demo demo.h demo.cpp)
target_link_libraries(demo ${lib_LIBS})

# empty! why?
message(STATUS ${lib_INCLUDES})

告诉我“demo”如何访问由“lib”设置的lib_INCLUDESlib_LIBS个库,它们在src/demo/CMakeLists.txt中似乎是空的。

我不希望src/demo/CMakeLists.txt包含“lib”的路径,只有src/lib/CMakeLists.txt应该知道“lib”的详细信息,它应该定义好的变量以便在src/demo/CMakeLists.txt中隐藏所有变量那些细节。

如果可能,请在答案中包含有效的CMakeLists.txt。

1 个答案:

答案 0 :(得分:0)

请仔细阅读SET命令的文档。您的变量lib_INCLUDES具有lib \ CMakeLists.txt的本地范围,因此您可以对其进行CACHE。

更好的方法是通过

填充INTERFACE_INCLUDE_DIRECTORIES lib
target_include_directories(lib INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})

所以target_link_libraries会自动附加lib的包含目录。