【问题标题】:linking bullet include directory with cmake将项目符号包含目录与 cmake 链接
【发布时间】:2015-04-12 12:38:52
【问题描述】:

我有一个常见问题,“未找到包含”。当我使用命令行设置包含和库目录时,一切都很好, 引用:

g++ src/B_engine.cc -lLinearMath -lBulletSoftBody -lBulletCollision -lBulletDynamics -I/usr/include/bullet -o a.out

但我需要让它与 cmake 一起使用,有我当前 cmake 的副本,

cmake_minimum_required( VERSION 2.8 )
project( a.out )
set( SOURCES src/B_engine.cc )
set( EXECUTABLE_NAME a.out )
find_package( Bullet REQUIRED )
add_executable( ${EXECUTABLE_NAME} ${SOURCES} )
add_definitions(-std=c++11)

当我执行“ccmake”时,我看到了:

BULLET_INCLUDE_DIR /usr/include/bullet
CMAKE_BUILD_TYPE
CMAKE_INSTALL_PREFIX /usr/local

所以,我(使用命令行)和 cmake 期望使用 /usr/include/bullet 作为目录。但是当我做“make”时,我得到了这个错误:

[100%]
Scanning dependencies of target a.out
Building CXX object CMakeFiles/a.out.dir/src/B_engine.cc.o
In file included from /home/user/test/src/B_engine.cc:2:0:/home/user/test/src/B_engine.hh:5:36: fatal error: btBulletDynamicsCommon.h: No such file or directory
 #include <btBulletDynamicsCommon.h>

我不明白为什么 g++ 命令行和 cmake 没有给出相同的结果。

【问题讨论】:

    标签: c++ linux cmake include-path bullet


    【解决方案1】:

    也许 Bullet 的 find_package 脚本只能定位包含目录,但不会将其添加到包含列表中。 所以我会明确地添加它:

    include_directories(${BULLET_INCLUDE_DIR})
    

    【讨论】:

    • 您可以删除“可能” :) 我认为没有任何 find_package 明确调用 include_directories
    • 我写了一个替代答案,建议包括指定路径的某些部分 (#include &lt;bullet/btBulletDynamicsCommon.h&gt;),但再想想这没有多大意义,因为that files includes more files,没有那个目录说明符.所以汉克的答案是唯一正确的。
    • 谢谢汉克,我昨天因为这个问题放弃了。等着有人来救我!你做到了!我的英雄! PS 其他人:我还需要在编译的方式中添加库
    • 只是提到这一行应该在 find_package 命令之前
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多