2017-09-29 348 views
1

我最近使用clion来构建我的项目,我可以使用cmake来构建我的所有项目,但是使用clion构建所有失败。谁能帮我?谢谢。clion build失败,cmake命令在并行构建失败时建立成功

我使用的版本是2017.2,使用clion捆绑cmake 3.8.2和gdb 3.5.1。 我的项目结构:

项目
├──PROJECT1
│├──SRC
│└──的CMakeLists.txt
├──项目2
│├──SRC
│└─ ─的CMakeLists.txt
├──项目3
│├──SRC
│└──的CMakeLists.txt
└─ ─CMakeLists.txt

项目的CMakeLists.txt是:

add_subdirectory(./project1) 
add_subdirectory(./project2) 
add_subdirectory(./project3) 

PROJECT1的的CMakeLists.txt用来构建静态了lib1.a:

aux_source_directory(./src ${LIB1_SRC}) 
include_directories(./src ${LIB1_INC}) 
add_library(lib1 STATIC ${LIB1_SRC}) 

项目2的的CMakeLists.txt用它来建立静态LIB2。 a:

aux_source_directory(./src ${LIB2_SRC}) 
include_directories(./src ${LIB2_INC}) 
add_library(lib2 STATIC ${LIB2_SRC}) 

project3的CMakeLists.txt需要链接lib1.a和lib2.a才能构建共享库lib3的.so:

aux_source_directory(./src ${LIB3_SRC}) 
include_directories(./src ${LIB3_INC}) 
add_library(lib3 SHARED ${LIB3_SRC}) 
target_link_libraries(lib3 ${LIB1_PATH}/lib1.a ${LIB2_PATH}/lib2.a) 
set_property(TARGET lib3 PROPERTY LINK_DEPENDS ${LIB1_PATH}/lib1.a ${LIB2_PATH}/lib2.a) 

当我使用克利翁运行/调试配置选择LIB3和球泡,它会构建失败,说LIB1,或者有时需要LIB2通过lib3.so.我可以用克利翁建立LIB1和LIB2 sucess选择运行/调试配置

LIB1和LIB2时,我有一个又一个尝试,我用cmake的./,然后进行-j 16,它有同样的问题。如果我使用make -j 1,它会创建成功。
为什么它不能并行构建? clion默认使用并行构建吗?

最好的问候,
西蒙

回答

0

你的CMakeLists.txt是不完整的,但我想改变target_link_libraries对LIB3这应该解决您的问题

target_link_libraries(lib3 lib1 lib2) 

关于你的克利翁的问题,文件 - >设置 - >构建,执行,部署 - > cmake->构建选项

这里你可以配置,如果你想使用并行构建

+0

target_link_libraries(lib3 lib1 lib2)和target_link_libraries(lib3 $ {LIB1_PATH} /lib1.a $ {LIB2_PATH} /lib2.a)有什么区别,我的只是添加完整的lib路径和一个.a;因为我可以使用cmake构建成功,而不是并行构建。我试过了,正如你所说的那样,与之前的 – simon

+0

一样,当删除.a,cmake ./ && make不能成功时,所以.a无法删除 – simon

+0

你正在添加一个依赖文件,而它应该是依赖于目标。什么是错误信息? – arved