我是cmake的新手。CMake鏈接不是子文件夾
我想創建代碼來創建一些類的實例(如ClassA
)並將它們收集到一個處理程序類中。爲此,我創建了一個模板類Creator
。 在每個類實現中,此類的一個實例是使用Creator類創建的。 (見ClassA.cpp
第8行)
我具有以下的文件夾結構
├── CMakeLists.txt
├── main.cpp
└── SubFolder
├── ClassA.cpp
├── ClassA.h
├── CMakeLists.txt
└── Creator.h
./main.cpp
#include <iostream>
#include "SubFolder/ClassA.h"
int main(int argc, char **argv) {
//classA a;
std::cout << std::endl << "Hello, world!" << std::endl;
return 0;
}
./CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(teststaticcmake)
add_executable(teststaticcmake main.cpp)
add_subdirectory(SubFolder)
target_link_libraries(teststaticcmake SubFolder)
install(TARGETS teststaticcmake RUNTIME DESTINATION bin)
子目錄/ ClassA.h
#ifndef __CLASSA__
#define __CLASSA__
class classA
{
public:
classA();
};
#endif //__CLASSA__
子文件夾/ ClassA.cpp
#include "ClassA.h"
#include "Creator.h"
classA::classA()
{
}
classA* pClassA = Creator<classA>::create();
子文件夾/ Creator.h
#ifndef __CREATOR__
#define __CREATOR__
#include <iostream>
template<typename T>
class Creator
{
public:
static T* create()
{
T* p = new T();
// Do Something here
// ... like output
std::cout << std::endl << "created: " << p;
return p;
}
};
#endif //__CREATOR__
子文件夾/的CMakeLists.txt
add_library(SubFolder ClassA.cpp)
我編譯該項目並運行它。所以我只得到輸出「你好,世界!」。
當我刪除評論(main.cpp
第5行)時,使用ClassA
的實例。所以我也得到類Creator
的輸出。代碼ClassA
已鏈接。
當我將類ClassA
移動到根目錄時,它也可以工作。
我也嘗試使用參數,如PUBLIC_LINK
,debug
和general
for target_link_libraries。但沒有任何工作。
我打算在這個main.cpp文件中使用Collection類,並從集合中獲取實例化對象。在main.ccp文件中,我不想知道每個實例類,因爲所有類ClassA
... ClassZ具有相同的接口(本例中未顯示)。
如何強制「未使用」代碼的鏈接?
編輯:不知道它是否必要。我使用KDevelop4。