C

使用 Cmake 建構可執行和可連結的共享庫

  • November 2, 2018

如何創建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 選項的參考。

引用自:https://unix.stackexchange.com/questions/479333