创建一个封装其他2个项目的可执行文件
Creating an executable encapsulating 2 other projects
我在Eclipse c++中工作。在我的项目中有这样的结构:
subProject A
-> creates a static library (works fine)
subProject B encapsulating subproject A
-> creates a static library (works fine)
subProject TestA
-> creates an executable (works fine)
subProject TestB
|dev
|src
| CmakeList.txt
|CmakeList.txt
-> creates an executable (doesn't work)
这是TestB可执行文件的dev目录中的CmakeList.txt:
set(${PROJECT_NAME}_INCLUDE_DIRS
$(CMAKE_CURRENT_SOURCE_DIR}/src
CACHE STRING "" FORCE)
include_directories(${${PROJECT_NAME}_INCLUDE_DIRS})
file(GLOB_RECURSE ${PROJECT_NAME}_HEADER_FILES FOLLOW_SYMLINKS
./*.hpp
./*.h)
file(GLOB_RECURSE ${PROJECT_NAME}_SORUCE_FILES FOLLOW_SYMLINKS
./*.cpp
./*.c)
set(${PROJECT_NAME}_FILES ${${PROJECT_NAME}_HEADER_FILES}
${${PROJECT_NAME}_SOURCE_FILES})
# Additional includes and link directories and dependencies
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../install/${CMAKE_BUILD_TYPE}/A/include)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../install/${CMAKE_BUILD_TYPE}/B/include)
if(${CMAKE_BUILD_TYPE} STREQUAL "Release")
set(${PROJECT_NAME}_EXTRA_LIBRARIES ${${PROJECT_NAME}_EXTRA_LIBRARIES}
A
B
pthread)
elseif(${CMAKE_BUILD_TYPE} STREQUAL "Debug")
set(${PROJECT_NAME}_EXTRA_LIBRARIES ${${PROJECT_NAME}_EXTRA_LIBRARIES}
A
B
pthread)
endif()
# Add a library to the project
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../install/${CMAKE_BUILD_TYPE}/A/lib)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../install/${CMAKE_BUILD_TYPE}/B/lib)
add_executable(${PROJECT_NAME} ${${PROJECT_NAME}_FILES})
target_link_libraries(${PROJECT_NAME} ${${PROJECT_NAME}_EXTRA_LIBRARIES})
install(FILES ${${PROJECT_NAME}_HEADER_FILES}
DESTINATION ${CMAKE_INSTALL_PREFIX}/include/
PERSMISSIONS OWNER_READ GROUP_READ WORLD_READ)
install(TARGETS ${PROJECT_NAME}
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin)
在我的B子项目中,在一个文件中,我有这样的:
#include "A.hpp"
...
A algo;
A.method(parameters)
当我构建我的TestB时,我有这个奇怪的错误出现在B项目上面的2行,这使得我的构建失败:
undefined reference to A::A()
undefined reference to A::method(parameter)
当我注释这些行并重建B项目和TestB项目时,它工作得很好,我在B项目中有一个库,在TestB.
中有一个。exe。我不明白我的问题在哪里
B
依赖于A
,因此将B
的CMakeLists.txt中的依赖添加到A与target_link_libraries
。即使它是一个静态库,当你构建B
时不会有任何实际的链接,这无论如何都会给CMake一个提示,每次你链接B
到可执行文件时,你也必须链接之后到A
。在链接命令行中,A
必须位于B
之后,以便在链接到A
时知道B
所需的符号。
如果您正在寻找快速修复,只需更改:
set(${PROJECT_NAME}_EXTRA_LIBRARIES ${${PROJECT_NAME}_EXTRA_LIBRARIES}
A
B
pthread)
set(${PROJECT_NAME}_EXTRA_LIBRARIES ${${PROJECT_NAME}_EXTRA_LIBRARIES}
B
A
pthread)
相关文章:
- 如何从其他类n个Qt C++调用QTimer?
- 在打开多个其他窗口时使用全屏窗口时帧速率非常低
- 程序没有问 3 个问题,而是将我对第一个问题的回答用于其他两个问题
- C++ 通过接口使用从其他几个类继承的类
- C++如何判断互斥体在阻塞其他线程时是否被单个线程不成比例地占用
- 如何将几个变量复制到其他变量
- operator_surrogate_func:未找到匹配的重载和其他2个错误
- 如何检查一个字符串是否包含多个其他字符串?
- 是否可以将多个结构作为一个数据包存储在一个函数中,然后传递给其他函数并在那里提取?
- C++ 在多个其他类中使用单个类 - 编译时出现多个定义错误
- 访问其他类中多个对象的私有成员向量
- 如果类包含基类类型的成员作为第一个元素,后跟其他成员,编译器是否可以优化空基?
- C++:对于继承多个类的类,如何从一个类继承某些属性,从另一个类继承其他属性?
- 传递多个参数的功能,该函数将类包含到其他函数
- R- armadillo c :用其他两个向量对向量进行排序
- 在其他类C++中创建多个对象
- 构造函数找不到合适的定义,以及 100 个其他错误?
- 如何在两个其他两个之间设置工具栏
- 如何从一个进程向多个其他进程发送信号
- 配置一个依赖于多个其他CMake项目的CMake项目