Não consigo incorporar a amálgama sqlite3 em um executável cmake hello world simples. Em poucas palavras: test.h
e test.cpp
estão funcionando, então por que estão sqlite.h
e sqlite.c
não? Além disso, usando qmake
(o sistema de construção do Qt), ele simplesmente funciona, e acho que os passos descritos são 100% os mesmos.
main.cpp.obj:-1: error: LNK2019: unresolved external symbol sqlite3_open referenced in function main
Diretório do projeto
CMakeLists.txt
main.cpp
sqlite/
|- sqlite3.c
|- sqlite3.h
test/
|- test.c
|- test.h
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(sqlite_test LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/sqlite ${CMAKE_CURRENT_SOURCE_DIR}/test)
add_executable(sqlite_test main.cpp sqlite/sqlite3.h sqlite/sqlite3.c test/test.h test/test.cpp)
arquivo qmake .pro para comparação que simplesmente funciona
TEMPLATE = app
TARGET = sqlite_qmake
INCLUDEPATH += $$PWD/sqlite $$PWD/test
HEADERS += \
$$PWD/sqlite/sqlite3.h \
$$PWD/test/test.h
SOURCES += \
main.cpp \
$$PWD/sqlite/sqlite3.c \
$$PWD/test/test.cpp
teste.h
#ifndef TEST_H
#define TEST_H
void sayhello();
#endif // TEST_H
teste.cpp
#include "test.h"
#include <iostream>
void sayhello(){
std::cout << "Hello Universe!" << std::endl;
}
principal.cpp
#include <iostream>
#include "sqlite3.h"
#include "test.h"
int main()
{
cout << "Hello World!" << endl;
sayhello();
sqlite3 *db = nullptr;
int rc = sqlite3_open("index.db", &db);
if (rc != SQLITE_OK){
return -1;
}
return 0;
}
Isso porque você tem que dizer explicitamente com quais idiomas você vai trabalhar. Basta adicionar
C
naLANGUAGES
lista noproject
comando: