在clion的cmake项目中包括itensor库

在clion的cmake项目中包括itensor库,cmake,clion,Cmake,Clion,所以我对CLion和CMake很陌生,所以提前对术语的错误使用表示歉意。我有以下问题: 在我的项目中,我想包括基本上是非CMake项目的。我将git克隆到我的计算机上,并构建了ITensor项目。接下来,我想在另一个项目中使用它,并与CMake进行链接: 我在main.cpp中的代码: #include <iostream> #include "itensor.h" int main() { std::string some_string = "Hello world";

所以我对CLion和CMake很陌生,所以提前对术语的错误使用表示歉意。我有以下问题:

在我的项目中,我想包括基本上是非CMake项目的。我将git克隆到我的计算机上,并构建了ITensor项目。接下来,我想在另一个项目中使用它,并与CMake进行链接:

我在main.cpp中的代码:

#include <iostream>
#include "itensor.h"

int main() {
    std::string some_string = "Hello world";
    return 0;
}
不幸的是,项目“教程”没有在CLion中生成。同样,CLion无法解析依赖项itensor.h。
有人知道为什么会这样吗?如何解决

我通过以下main.cpp解决了这个问题:

#include <iostream>
#include "itensor/itensor.h"

int main() {
    std::string some_string = "Hello world";
    return 0;
}

如我所示,ITensor的路径可以是相对的(使用${PROJECT\u SOURCE\u DIR}变量)也可以是绝对的。

尝试Thomas5631的解决方案后,编译遇到了与lapack的链接问题。我通过添加一些标志解决了这个问题,尽管我不确定是否所有标志都是必需的

My CMakeLists.txt:

project(tutorial)
cmake_minimum_required(VERSION 3.6)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

#Bring the headers into the project
include_directories(/home/tom/Documents/workspace/ITensor/)

#Link the library
add_library(itensor STATIC IMPORTED)
set_property(TARGET itensor PROPERTY IMPORTED_LOCATION /home/tom/Documents/workspace/ITensor/lib/libitensor.a)

set(SOURCE_FILES  main.cpp)
add_executable(tutorial ${SOURCE_FILES})
cmake_minimum_required(VERSION 3.6)
project(my_project)
#Bring the headers into the project (full or relative path)
include_directories(itensor) 

#Link the Itensor library
add_library(itensor STATIC IMPORTED)
set_property(TARGET itensor PROPERTY IMPORTED_LOCATION /home/david/my_project/itensor/lib/libitensor.a)

#Set a variable with all the new flags
set(ITENSOR_FLAGS "-DPLATFORM_lapack -D__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES=0")
set(ITENSOR_LINK_FLAGS "-DPLATFORM_lapack -L/home/david/my_project/itensor/lib -litensor -lpthread -L/usr/lib -lblas -llapack")

#Append the new flags
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 ${ITENSOR_FLAGS}")

add_executable(my_project main.cpp)
target_link_libraries(my_project itensor "${ITENSOR_LINK_FLAGS}")
动机:在文件夹
i传感器/project_模板
中有一个示例程序,它非常简单,可以使用
make
(从终端)进行编译。编译的输出显示以下标志:

g++ -m64 -std=c++11 -c -I. -I/home/david/my_project/itensor -I/usr/include -O3 -DNDEBUG -Wall -DPLATFORM_lapack -D__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES=0 -Wno-unused-variable -o myappname.o myappname.cc

[... some warnings ...]

g++ -m64 -std=c++11 -c -I. -I/home/david/my_project/itensor -I/usr/include -O3 -DNDEBUG -Wall -DPLATFORM_lapack -D__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES=0 -Wno-unused-variable -o myclass.o myclass.cc
g++ -m64 -std=c++11 -I. -I/home/david/my_project/itensor -I/usr/include -O3 -DNDEBUG -Wall -DPLATFORM_lapack -D__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES=0 -Wno-unused-variable myappname.o myclass.o -o myappname -L/home/david/my_project/itensor/lib -litensor -lpthread -L/usr/lib -lblas -llapack

嗨,托马斯,太好了!谢谢你的快速回复!现在它似乎起作用了(这意味着我得到了另一个错误,不过这次是链接到lapack的,所以不再关注这篇文章:)。只是我觉得你把CMakeLists.txt中的“project(tutorial)”行换成了main.cpp(可能就在复制粘贴到帖子的时候)?不错!这也消除了我与拉帕克之间的问题!!
g++ -m64 -std=c++11 -c -I. -I/home/david/my_project/itensor -I/usr/include -O3 -DNDEBUG -Wall -DPLATFORM_lapack -D__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES=0 -Wno-unused-variable -o myappname.o myappname.cc

[... some warnings ...]

g++ -m64 -std=c++11 -c -I. -I/home/david/my_project/itensor -I/usr/include -O3 -DNDEBUG -Wall -DPLATFORM_lapack -D__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES=0 -Wno-unused-variable -o myclass.o myclass.cc
g++ -m64 -std=c++11 -I. -I/home/david/my_project/itensor -I/usr/include -O3 -DNDEBUG -Wall -DPLATFORM_lapack -D__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES=0 -Wno-unused-variable myappname.o myclass.o -o myappname -L/home/david/my_project/itensor/lib -litensor -lpthread -L/usr/lib -lblas -llapack