我有一个库“lib”和一个可执行的“demo”。
我遇到的问题是“demo”无法获取由“lib”设置的lib_INCLUDES
和lib_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_INCLUDES
和lib_LIBS
个库,它们在src/demo/CMakeLists.txt
中似乎是空的。
我不希望src/demo/CMakeLists.txt
包含“lib”的路径,只有src/lib/CMakeLists.txt
应该知道“lib”的详细信息,它应该定义好的变量以便在src/demo/CMakeLists.txt
中隐藏所有变量那些细节。
如果可能,请在答案中包含有效的CMakeLists.txt。
答案 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的包含目录。