我正在尝试编译子目录 project/model/tests
中的可执行文件以进行测试,并且需要链接驻留在 project/model
中的模型文件。但是,我无法让它工作。我已成功添加父目录,但 cmake 一直告诉我没有找到父目录中 foo.cpp 的源文件,而当前目录中的 bar.cpp 已正确添加。
cmake_minimum_required(VERSION 2.6)
# get parent directory
get_filename_component(MODEL_DIR ${CMAKE_CURRENT_SOURCE_DIR} PATH)
# Locate GTest
find_package(GTest REQUIRED)
# Add parent directory
include_directories(${GTEST_INCLUDE_DIRS} ${MODEL_DIR})
link_directories(${MODEL_DIR})
# all included directories are printed out correctly
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
foreach(dir ${dirs})
message(STATUS "dir='${dir}'")
endforeach()
# foo.cpp, which is in the parent directory is not found
add_executable(runTests foo.cpp bar.cpp)
target_link_libraries(runTests ${GTEST_LIBRARIES} pthread)
谢谢。
最佳答案
当 add_executable()
和 add_library()
中列出的文件被指定为相对路径(它们几乎总是如此)时,它们被解释为相对于 CMAKE_CURRENT_SOURCE_DIR
。换句话说,您必须执行以下操作之一:
add_executable(runTests ../foo.cpp bar.cpp)
或者:
add_executable(runTests ${MODEL_DIR}/foo.cpp bar.cpp)
旁注:使用 link_directories()
几乎不是一个好主意;该命令通常比它的值(value)更麻烦。首选的替代方法是在必要时提供到 target_link_libraries()
的完整路径。
关于cmake - 从父目录 cmake 添加可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15585007/