【发布时间】:2014-11-04 04:45:38
【问题描述】:
我有一个库“lib”和一个可执行的“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/demo/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。
【问题讨论】: