C
使用 Cmake 建構可執行和可連結的共享庫
如何創建
executable shared-library
使用cmake
?就像是:
libtest.so ::可連結共享庫
libtest.so ::也可執行
**注意:**已知 gcc/g++ 選項可以實現相同的效果 ( https://unix.stackexchange.com/a/223411/152034 )。但解決方案需要
cmake
方法
注意: *關於這個的第一個資訊是,似乎有一個與 cmake 相關的未解決問題。*因此,這可以被認為是實現相同目的的間接解決方案。
現在按照插圖使用
cmake
。測試.cpp
#include <stdio.h> void sayHello (char *tag) { printf("%s: Hello!\n", tag); } int main (int argc, char *argv[]) { sayHello(argv[0]); return 0; }
測試/測試測試.cpp
#include <stdio.h> extern void sayHello (char*); int main (int argc, char *argv[]) { printf("\nNow Inside test-test !\n"); sayHello(argv[0]); return 0; }
CMakeLists.txt
cmake_minimum_required(VERSION 3.5) project(pie_test) #shared-lib as executable add_library(${PROJECT_NAME} SHARED test.cpp ) target_compile_options(${PROJECT_NAME} PUBLIC "-pie") target_link_libraries(${PROJECT_NAME} "-pie -Wl,-E") set_property(TARGET ${PROJECT_NAME} PROPERTY POSITION_INDEPENDENT_CODE 1) #executable linking to the executable-shared-library add_executable(test_test ttest/test_test.cpp ) target_link_libraries(test_test pie_test) set_property(TARGET test_test PROPERTY POSITION_INDEPENDENT_CODE 1)
build.sh
#!/bin/bash rm -rf build mkdir build cd build cmake .. #--debug-output make VERBOSE=1 echo "Done!" echo ""
此處為 gcc 選項的參考。